一个UIView如何知道添加的子视图的UIViewController?

3
在这种情况下,例如
- (void)applicationDidFinishLaunching:(UIApplication *)application {    
...
[window addSubview:gameController.view];
...
}

游戏控制器的视图如何保留与游戏控制器的关联?我查看了所有调试器变量,除了一个布尔标志表明它属于视图控制器外,没有其他关联。因此,该视图会被传递到视图层次结构(不一定是窗口),但游戏控制器将获得事件,例如shouldAutorotateToInterfaceOrientation。如果不是通过从gameController.view传出的某些隐藏引用来跟踪这些内容,那么在哪里跟踪的?

UIView *tmp = gameController.view;
[window addSubview:tmp];

很明显gameController知道tmp,但是在那段代码之后窗口如何知道gameController呢?
1个回答

4
UIViewController是UIResponder的一个子类,并插入到响应者链中,位于视图和该视图的父视图之间。因此,在UIViewController管理的视图上调用nextResponder将返回UIViewController的实例。
这就是诸如shouldAutorotateToInterfaceOrientation:等事件通过UIResponder实例的层次结构向上传递的方式。可以在iPhone应用程序编程指南中的图3.1中看到这个过程的示意图

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接