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

Iphone iOS如何知道哪个视图控制器应该处于活动状态?,iphone,ios,ipad,uiviewcontroller,Iphone,Ios,Ipad,Uiviewcontroller,如果我想用另一个屏幕替换应用程序的一个屏幕,但我不使用导航栏/选项卡栏控制器,那么我可以从窗口中删除oldViewController.view,并将newViewController.view添加到其中。就这些,现在newViewController将获得旋转事件等 但是UIView并没有引用“它的”控制器,所以这怎么可能,iOS怎么知道它应该使newViewController成为一个活动的控制器?iOS是否有魔力,它从视图内部引用控制器还是什么 更新: 我想我被误解了:我不想问如何使一些视

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

但是UIView并没有引用“它的”控制器,所以这怎么可能,iOS怎么知道它应该使newViewController成为一个活动的控制器?iOS是否有魔力,它从视图内部引用控制器还是什么

更新:


我想我被误解了:我不想问如何使一些视图控制器成为活动的-我知道这一点。我只是好奇,我怎么可能把一些视图传递给UIWindow对象([window addSubview:view]),它却不知怎么地找到了视图控制器,尽管视图不知道它的控制器。

不幸的是,iOS只向堆栈的第一个
视图控制器发送事件。您可以尝试在其他视频的顶部显示一个新的,例如,它将永远不会旋转


如果不使用navbar/tabbar控制器,则每次都必须在
窗口中添加和删除一个控件,以便在一次只保留一个控件(如果希望有事件)。

应用程序的主UIWindow类将在其rootViewController属性中设置一个视图控制器。该控制器的视图是应用程序的“主”视图。这通常是在项目的main.xib中设置的。该视图控制器将接收常见事件,如“viewDidAppear”或“willRotateToInterfaceOrientation”。如果你愿意,你可以在上面展示你自己的观点,但是你需要自己管理这些事件。但通常你不会这么做。您只需使用UINavigationController或uitabarcontroller作为您的rootViewController,并允许它们管理将事件获取到新的“推送”视图控制器,或使用“presentModalViewController”弹出视图控制器即可。

是的,我和您有相同的问题。我想出来了

UIView是从UIResponder派生的。UIView必须是UIResponder::nextResponder的子类

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

因此,视图可以看到其控制器。这意味着窗口知道最上面的视图,并且

它的控制器


祝你好运。

我想是的。如果从viewcontroller向窗口添加第二个视图,则不会仅获取第一个视图的旋转事件。+1但该属性仅在SDK 4.0之后可用。只需将主UI窗口的
rootViewController
属性设置为新的视图控制器。它的视图将被安装为“窗口的内容视图”(来自文档)。感谢您提供有关rootViewController的信息,但这并不是我问题的答案。若您执行[window addSubview:view],则会自动设置rootViewController,尽管UIWindow对象不应该知道有关传递视图的视图控制器的任何信息。我很好奇这是内在的魔法还是我不明白的东西。