如何在 AppDelegate 中将视图控制器设置为根视图控制器

Posted

技术标签:

【中文标题】如何在 AppDelegate 中将视图控制器设置为根视图控制器【英文标题】:How to set the view controller as root view controller in AppDelegate 【发布时间】:2016-08-11 13:04:01 【问题描述】:

我有一个没有导航控制器的视图控制器。它的名字是LoginViewController。在我的AppDelegate 中,我想保留我的LoginViewController 作为根视图控制器。

如何在 Objective-C 中做到这一点?如何将我的视图控制器设置为根视图控制器?

注意:我的视图控制器没有导航视图控制器。它是一个单一的视图控制器。

【问题讨论】:

你在用故事板吗 How to change RootViewController in AppDelegate From Other ViewController?的可能重复 是的,我正在使用故事板 【参考方案1】:

喜欢

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
// 1. get the Storyboard Name
UIStoryboard* main = [UIStoryboard storyboardWithName:@"Main"
                                               bundle:[NSBundle mainBundle]];
//2. get the ViewController using Storyboard ID
UIViewController *viewConr = [main instantiateViewControllerWithIdentifier:@"HomeViewController"]; 
// 3.finally assign the Root
self.window.rootViewController = viewConr;
[self.window makeKeyAndVisible];
return YES;

例如

【讨论】:

【参考方案2】:

没有故事板:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    // Override point for customization after application launch.
    LoginViewcontroller *Vc = [[LoginViewcontroller alloc]init];
    self.window.rootViewController = Vc;
    [self.window makeKeyAndVisible];
    return YES;

如果使用情节提要,只需将该视图控制器作为情节提要的初始视图控制器。

【讨论】:

【参考方案3】:

如果你想从登录页面 VC 中将主页 VC 设置为 root vc

在登录页面导入appdelegate

#import "AppDelegate.h"//Import in Login page VC
self.delegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; // In viewDidLoad

在你导航的地方写下代码

//Make root view controller
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
HomeViewController * hvc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"Home"];//Your Home page story board ID
self.delegate.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:hvc];
[self.delegate.window makeKeyAndVisible];

【讨论】:

以上是关于如何在 AppDelegate 中将视图控制器设置为根视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器

如何在情节提要 XCode6 (Swift) 中将所有视图控制器设置为风景

如何在 appdelegate 中控制视图控制器?

UITabBar 自定义背景图像应用于一个视图控制器而不是 AppDelegate

如何在 appdelegate 中关闭视图控制器?