为什么UITableView中会得到泛姿态?

问题描述 投票:0回答:2

作为苹果的文件说,要处理手势的处理是

  1. 初始视图试图处理该事件或消息。如果它不能处理这个事件,它传递的事件,它的父,因为最初的观点是不是在它的视图控制器的视图层次的最顶部的视图。
  2. SuperView把试图处理该事件。如果上海华不能处理这个事件,它传递的事件,它的父,因为它仍然不是在视图层次结构的最顶部的视图。
  3. 在视图控制器的视图层次的最顶层视图试图处理该事件。如果最上面的视图不能处理该事件时,它把事件到其视图控制器。
  4. 视图控制器试图处理该事件,并且如果不能,将事件传递到窗口。
  5. 如果窗口对象不能处理这个事件,它传递的事件,以单身的应用程序对象。
  6. 如果应用程序对象不能处理这个事件,它丢弃的事件。

然而,在我的情况,我的UITableViewController的子类的窗口的根VC,并添加以覆盖整个屏幕如下:

@interface MyTableViewController : UITableViewController()
@end

@implementation MyTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
}

我认为redView将是hit-test视图,如果我触摸屏幕来产生一个平移手势,并且因为redView不能处理它,它会触摸事件传递给它的父,这也是的tableView的上海华。其结果是,在tableview中不会处理平移手势。然而,仍然的tableView可以处理的移动手势,任何人都可以解释一下吗?

ios uigesturerecognizer
2个回答
2
投票

如果您的视图控制器是UITableViewControllersuperviewredView将是UITableView,所以当redView不处理的姿态,它传递给它的superview,所以UITableView接收(和工艺)的姿态。


1
投票

如果有人还在这里寻找一个更简单的解决方案是:在UITableView中有一个名为panGestureRecognizer属性,以便在上面观您只需编写代码:

    [self.upperView addGestureRecognizer:self.tableView.panGestureRecognizer];

所以表滚动事件被传递到表视图

© www.soinside.com 2019 - 2024. All rights reserved.