iOS如何知道哪个视图控制器应该处于活动状态?

时间:2011-03-23 14:40:10

标签: iphone ios ipad uiviewcontroller

如果我想用另一个屏幕替换一个应用程序的屏幕,但我不使用导航栏/标签栏控制器,那么我可以从窗口中删除oldViewController.view并向其添加newViewController.view。这就是全部,现在newViewController将获得旋转事件等。

但UIView没有引用“它的”控制器,那么这怎么可能呢,iOS如何知道它应该使newViewController成为活动的? iOS是否有一些魔力,它在内部引用控制器从视图或什么?

更新:

我认为我被误解了:我不问如何使一些视图控制器成为活动控制器 - 我知道。我只是好奇,我怎么可能将一些视图传递给UIWindow对象([window addSubview:view])并且它以某种方式找到视图控制器,尽管视图不知道它的控制器。

3 个答案:

答案 0 :(得分:3)

是的,我和你一样有同样的问题。我明白了

UIView源自UIResponder。和UIView必须子类UIResponder :: nextResponder。

它的默认实现是返回视图的视图控制器(如果没有,那将是超级视图)

因此,视图可以看到它的控制器。这意味着窗口知道最顶层的视图,也

它的控制器。

祝你好运。

答案 1 :(得分:2)

不幸的是,iOS只会将事件发送到堆栈的第一个ViewController。您可以尝试使用视频在其他人的顶部展示一个新的,它永远不会旋转。

如果您不使用导航栏/标签栏控制器,则必须每次从Window添加和删除,以便在您想要发生事件时只保留一个。

答案 2 :(得分:1)

应用程序的主UIWindow类将在其rootViewController属性中设置视图控制器。该控制器的视图是应用程序的“主要”视图。这通常在项目的主.xib中设置。该视图控制器将接收通常的事件,如“viewDidAppear”或“willRotateToInterfaceOrientation”。如果您愿意,可以在自己的顶部放置自己的视图,但是您需要自己管理这些事件。通常你不会这样做。您只需使用UINavigationController或UITabBarController作为rootViewController,并允许它们管理将事件发送到新的“推送”视图控制器,或者使用“presentModalViewController”弹出视图控制器。