从 UIViewController 方法更改 UIWindow 的呈现视图

Posted

技术标签:

【中文标题】从 UIViewController 方法更改 UIWindow 的呈现视图【英文标题】:Change UIWindow's presented view from UIViewController method 【发布时间】:2011-04-26 02:13:59 【问题描述】:

我有一个带有两个 UIViewController 子类的简单应用程序。

我想通过调用我的 UIViewController 子类之一的方法来更改应用程序的 UIWindow 显示的视图。

基本上我只是在乱搞,我正在尝试构建一个带有登录屏幕的简单测试应用程序,在用户输入凭据后会显示一个主视图。我对ios编程的窗口和视图机制不太熟悉,目前正在阅读http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW1并尝试了解一下。

【问题讨论】:

另外,我是想在应用程序加载时实例化这两个类,还是可以等到登录测试完成以实例化将呈现给用户的主视图? 【参考方案1】:

如果这是为了登录屏幕,您应该直接将主视图控制器添加到窗口,并将登录视图控制器作为模式视图添加到主视图控制器中。

在 applicationDidFinishLaunching 内部...

MainViewController *mainViewController = [[MainView....... // instantiate UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:mainViewController];
[mainViewController release]; 
[window addSubview:navController.view];

MainViewController 内部

-(void)viewWillAppear:(BOOL)animated

    LoginViewController *loginVC = .... //instantiate
    [self.navigationController presentModalViewController:loginVC  animated:NO];
    [loginVC release];

如果登录成功,

[self dismissModalViewControllerAnimated:YES];

【讨论】:

以上是关于从 UIViewController 方法更改 UIWindow 的呈现视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 UIViewController 更改分段控件标题(设置)

如何从属于 UIPageViewController 的 UIViewController 之一更改 UIPageViewController?

如何在将 UIViewController 呈现给自定义时更改默认转换

使用方法调配一次在所有 UIViewController 实例上更改 iOS13 上的 modalPresentationStyle

UIViewController - 无法通过 IBOutlet 更改 vcontroller.view 中的图像

嵌入在 UIViewController 中的 UIHostingController - 如何从外部更新 @State?