所以我可能找到了解决这个问题的方法,使用 AppDelegate.m。如果您使用 Storyboard,则不需要在 AppDelegate.h 中导入 ViewController 类,因为您使用 StoryboardID 引用它们。它看起来像这样:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL userLoggedIn = NO;
if (userLoggedIn) {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"NowPlaying04"];
[self.window setRootViewController:controller];
} else {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Start00"];
[self.window setRootViewController:controller];
}
[self.window makeKeyAndVisible];
// Override point for customization after application launch.
return YES;
}
显然,您需要通过 InterfaceBuilder/Storyboard 属性在视图控制器上设置标识符。为 BOOL 变量 userLoggedIn 设置不同的值,应用程序会使用相对的 rootViewController 加载。
现在故事板看起来像这样:
哪个更有条理。isInitialViewController 在 NowPlaying04 屏幕上被标记。但是 AppDelegate 根据 isLoggedIn BOOL 变量决定是转到它还是切换到 NavigationController(ID 为 Start00)。
感谢 @НаильГалиаскаров 提供使用不同 rootViewControllers 的想法。