iPhone:UIView对象如何知道哪个是Controller?

时间:2011-01-05 12:26:00

标签: iphone uiview uiviewcontroller

响应者链向视图发送事件,然后向其控制器发送事件。但是系统如何知道视图的控制器对象?我没有在UIView中找到任何存储对其控制器的引用的属性。另一方面,控制器显然具有view属性来标识其视图。

3 个答案:

答案 0 :(得分:2)

UIViewUIResponder子类)通过实例方法知道它的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