以下情形:
我的iPad应用程序有一个SplitViewController,因为它是主VC。启动应用程序(新的或从后台)后,我有一个全屏登录视图,显然在输入正确的密码后会消失。
问题:
登录后,我想呈现与移动到背景之前完全相同的屏幕。这样可以正常工作,除非在分割视图的顶部有一个模态视图(如设置等)。
我尝试了什么:
在AppDelegate中,我存储了我的self.window.rootViewController,将登录vc作为我的root vc,登录后我将存储的根VC设置为实际根VC。但是(模态)设置视图不可见,无法再次打开(警告:尝试在已经呈现VC的SplitVC上显示VC)。实际上,除非app正确关闭,否则不能打开其他模态视图。
第二次尝试:我没有将登录VC设置为root VC,而是将其作为全屏模式视图显示在我的拆分视图之上。这产生了与第一次尝试相同的错误消息,但结果不同。进入后台模式后,根本不会显示登录VC(因为已有模态视图)。
答案 0 :(得分:1)
这是b'coz你试图在它实际作为RootViewController加载时呈现VC。
尝试使用:
UISplitViewController:
- 一旦加载了Root和MasterViewControlller,你将把UIViewControllers作为你的SubViews RootViewController ..来自UIViewController,如果你想恢复 回到RootViewController,试试这个:
[self.navigationController popToRootViewControllerAnimated:NO];
我只是觉得你的问题很相似。
希望它有所帮助。
答案 1 :(得分:1)
我做的是以下内容:
创建一个可存储我模态呈现的VC的属性(它们都嵌入在UINavigationController中)
@property (nonatomic) UINavigationController *navController;
创建登录vc时,我存储我的模态vc(可能是nil
,这很好),将其关闭并显示登录vc
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
self.navController = (UINavigationController *)self.window.rootViewController.presentedViewController;
if (self.navController) {
[self.navController dismissViewControllerAnimated:NO completion:nil];
}
[self.window.rootViewController presentViewController:loginViewController animated:NO completion:nil];
当登录成功时,我会关闭登录vc并恢复模态vc(如果可用)
if (self.navController) {
[self.window.rootViewController presentViewController:self.navController animated:NO completion:nil];
}
答案 2 :(得分:0)
你能这样试试。
Root VC是主屏幕而不是登录页面。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
在上面的代码中,将您的登录页面显示给根VC。
- (void)applicationDidBecomeActive:(UIApplication *)application{
//Use below method or similar method to remove any presented VC on Root VC
if ([((UINavigationController *)self.window.rootViewController).visibleViewController isKindOfClass:[RLSplashViewController class]]) {
NSLog(@"AppDelegate dismiss splash page");
[self.window.rootViewController dismissViewControllerAnimated:NO completion:nil];
}
//And present your login VC
}
在上面的代码中,首先非常重要,删除根VC上显示的任何VC。然后将登录页面显示给您的根VC。
我目前正在使用这种方式来呈现启动页面(来自后台或新版),在您的情况下,它是登录页面。希望这对你的情况有帮助:))