Ios 为什么是UIViewController和UIView子类UIResponder?

Ios 为什么是UIViewController和UIView子类UIResponder?,ios,objective-c,iphone,uiview,Ios,Objective C,Iphone,Uiview,查看Apple示例代码 我看到PaintingViewController和PaintingView都实现了 - (BOOL)canBecomeFirstResponder { return YES; } 为什么是二元性?一般来说,不应该只有UIView负责处理硬件生成的触摸事件吗?如否中所述,有一个简单的例子: 假设您有一个presentedController。然后,即使触摸事件仍然可见,您也不希望presentingController处理触摸事件 视图控制器层次结构在事件传递中

查看Apple示例代码

我看到PaintingViewController和PaintingView都实现了

- (BOOL)canBecomeFirstResponder {
    return YES;
}

为什么是二元性?一般来说,不应该只有UIView负责处理硬件生成的触摸事件吗?如

否中所述,有一个简单的例子:

假设您有一个
presentedController
。然后,即使触摸事件仍然可见,您也不希望
presentingController
处理触摸事件

视图控制器层次结构在事件传递中非常重要

请参阅
UIViewController
文档中的注释:

视图控制器与它管理的视图紧密绑定,并参与用于处理事件的响应器链。视图控制器也是UIResponder对象,并插入到视图控制器的根视图和该视图的superview(通常属于不同的视图控制器)之间的响应器链中。如果视图控制器的任何视图都不能处理事件,则视图控制器可以选择处理事件或将其传递给superview


编辑:所以基本上这允许定义一个UIView,它将“捕获”响应程序区域,但不会处理事件,并将其传递给控制器?支持此案例的设计架构原因是什么?presentedController是否始终具有能够处理第一响应程序事件的UIView属性?@MaximVeksler是,但您不希望传递未处理的事件。这就是在那里有一个控制器应答器的全部意义。它可以决定事件是否应该上升。与
UINavigationController
比较。当事件不由当前视图控制器处理时,它仍然可以由导航控制器本身处理。决策是视图控制器的决策,而不是视图层次结构的决策。现在这是有意义的,它是一个决策交叉点。MVP模型中的控制器负责“选择”停止哪些事件以及传递哪些事件。感谢您与我合作以清除此问题:)