正如苹果文件所说,处理手势的过程是
初始视图尝试处理事件或消息。如果它无法处理该事件,它会将事件传递给它的父视图,因为初始视图不是其视图控制器的视图层次结构中最顶层的视图。
超级视图尝试处理该事件。如果父视图不能处理事件,它会将事件传递给它的父视图,因为它仍然不是视图层次结构中最顶层的视图。
视图控制器的视图层次结构中的最顶层视图尝试处理该事件。如果最顶层的视图无法处理该事件,它会将事件传递给它的视图控制器。
视图控制器尝试处理事件,如果不能,则将事件传递给窗口。
如果窗口对象无法处理事件,它会将事件传递给单例应用程序对象。
如果应用程序对象无法处理该事件,它会丢弃该事件。
但是,在我的情况下,我有一个UITableViewController 的子类作为 window 的根 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 将是命中测试视图,并且由于 redView 无法处理它,它会将触摸事件传递给它的超级视图,它也是 tableView 的超级视图. 结果,tableview 将无法处理平移手势。但是,tableView 仍然可以处理平移手势,有人可以解释一下吗?