ios - 从 UITabBarController 加载 View Controller 时出现问题

标签 ios objective-c

过去,我的应用程序只有 1 个主视图 Controller (MainViewController) 和一个登录 View Controller (LoginViewController),但现在我正在转向选项卡栏 Controller .

之前,我能够对 MainViewControllerviewDidLoad 进行简单检查,以确定 key 链中是否存在用户名和密码。如果用户名和密码不存在,我使用 segue 弹出模式登录 View Controller 。

通过使用选项卡栏 Controller 的新设置,我仍然只有 1 个 View Controller (MainViewController),它是 Root View Controller (截至目前),我正在尝试做同样的事情它会弹出登录屏幕的模式。

现在,当我在 MainViewControllerviewDidLoad 中调用 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];
}

我从错误消息中可以看到,当我尝试从 MainViewControllerviewDidLoad 执行 Segue 时,它​​正在尝试加载 LoginViewController来自UITabBarController

为什么我无法从MainViewControllerviewDidLoad加载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/

相关文章:

ios - FBSDKGraphRequest 不工作(iOS)

ios - 如何在 iOS 中放大 UIImage 以清除像素而不变得模糊?

iphone - iOS Image View 性能提升建议

ios - 即使 focuspointofinterest 在 iPhone6 和 iPhone6+ 上发生变化,焦点也不会改变

ios - 约束适用于 iOS 8,但不适用于 iOS 7

ios - 我的 .txt 文件在加载文本时滞后 - 保存到 Firebase 并从那里加载可以加快速度吗?

ios - ECSlidingViewController2 可以与左右栏按钮一起使用吗?

ios - UITextView 不从顶部开始

ios - Root View Controller 顶部的神秘白色条

ios - 如何将 CGRect 的大小增加一定的百分比值?