响应者链向视图发送事件,然后向其控制器发送事件。但是系统如何知道视图的控制器对象?我没有在UIView中找到任何存储对其控制器的引用的属性。另一方面,控制器显然具有view属性来标识其视图。
答案 0 :(得分:2)
UIView
(UIResponder
子类)通过实例方法知道它的viewcontroller或superview
- (UIResponder *)nextResponder
来自UIResponder
班级参考:
UIResponder类不存储 或设置下一个响应者 自动,而不是返回零 默认情况下。子类必须覆盖 此方法设置下一个响应者。 UIView通过实现此方法 返回UIViewController对象 它管理它(如果它有一个)或它 超级视图(如果没有); UIViewController实现了该方法 通过返回其视图的超级视图; UIWindow返回应用程序 对象,UIApplication返回nil。
答案 1 :(得分:0)
据我所知,ViewController是系统的第一个对象(不是UIView),它包含在响应链中(读取UIResponder类),并管理触摸,将它们发送到相应的UIView。
答案 2 :(得分:0)
以下是响应者链如何运作的一个很好的解释:http://iphonedevelopment.blogspot.com/2008/10/bit-about-responder-chain.html。
编辑:
由于视图控制器与它们管理的视图紧密绑定,因此它们也是用于处理事件的响应程序链的一部分。视图控制器本身是UIResponder类的后代,并插入到托管视图及其超级视图之间的响应链中。
所以UIView和UIViewControllers也是UIResponder的后代,它有一个setNextResponder:方法来跟踪链中的下一个响应者。
Moszi