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

时间:2009-08-14 07:27:23

标签: objective-c uikit uiview uiviewcontroller

在说

的情况下
- (void)applicationDidFinishLaunching:(UIApplication *)application {    
...
[window addSubview:gameController.view];
...
}

gameController的视图如何保持与gameController的关联?我已经达到所有调试器变量的峰值,除了布尔标志以外,我看不到它属于视图控制器的关联。所以视图被传递到视图层次结构(不一定必须离开窗口),但是gameController将获取诸如shouldAutorotateToInterfaceOrientation之类的事件。如果不是因为UIView中的一些隐藏的引用传出了gameController.view

,那么它在哪里被跟踪?
UIView *tmp = gameController.view;
[window addSubview:tmp];

很明显gameController知道tmp,但是那个代码之后窗口如何知道gameController?

1 个答案:

答案 0 :(得分:4)

UIViewController是UIResponder的后代,并插入到视图和该视图的superview之间的响应链中。因此,在由UIViewController管理的视图上调用nextResponder将返回UIViewController的所述实例。

这就是shouldAutorotateToInterfaceOrientation:等事件通过UIResponder实例的层次结构传递的方式。可以在figure 3.1 in the iPhone Application Programming Guide中看到显示此图表。