过去,我的应用程序只有 1 个主视图 Controller (MainViewController
) 和一个登录 View Controller (LoginViewController
),但现在我正在转向选项卡栏 Controller .
之前,我能够对 MainViewController
的 viewDidLoad
进行简单检查,以确定 key 链中是否存在用户名和密码。如果用户名和密码不存在,我使用 segue 弹出模式登录 View Controller 。
通过使用选项卡栏 Controller 的新设置,我仍然只有 1 个 View Controller (MainViewController
),它是 Root View Controller (截至目前),我正在尝试做同样的事情它会弹出登录屏幕的模式。
现在,当我在 MainViewController
的 viewDidLoad
中调用 segue 时:
[self PerformSegueWithIdentifier:@"loadLoginView"发件人:nil];
我收到此错误:
Warning: Attempt to present <LoginViewController: 0x1757cd80> on <UITabBarController: 0x17571e50> whose view is not in the window hierarchy!
但是,如果我将一个按钮关联到一个通过 segue 加载 LoginViewController
的方法,它就可以正常工作。我在 MainViewController 中这样做,如下所示:
-(void)loadLogin
{
[self performSegueWithIdentifier:@"loadLoginView" sender:nil];
}
我从错误消息中可以看到,当我尝试从 MainViewController
的 viewDidLoad
执行 Segue 时,它正在尝试加载 LoginViewController
来自UITabBarController
。
为什么我无法从MainViewController
的viewDidLoad
加载LoginViewController
?
对此的任何帮助都会很棒。
谢谢!
最佳答案
看起来 -viewDidLoad
在将 View Controller 堆栈添加到窗口之前被调用。您可以尝试的两件事是:
延迟到下一次运行循环(这应该给 View Controller 时间到位)[self PerformSelector:@selector(loadLogin) withObject:self afterDelay:0];
。此方法不允许您直接调用带有两个参数的方法
您可以使用-presentViewController:animated:completion:
。这将使您的登录 Controller 从底部滑入。
关于ios - 从 UITabBarController 加载 View Controller 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457497/