【问题标题】:Presenting from window.rootViewController从 window.rootViewController 呈现
【发布时间】:2014-10-19 04:03:22
【问题描述】:

在我的应用程序中,我将窗口的 rootViewController 设置为 willFinishLaunching。标准。

didFinishLaunching 中,我检查用户是否已登录,如果没有,我会提供一个 LoginViewController。

- (BOOL)application:(UIApplication *)application willFinishLaunching...
{
    ...

    self.window.rootViewController = [MyViewController new];
    [self.window makeKeyAndVisible];

    ...

    return true;
}

- (BOOL)application:(UIApplication *)application didFinishLaunching...
{
    if (/* not logged in */) {
        UIViewController *login = [LoginViewController new];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:welcome];
        [self.window.rootViewController presentViewController:nav animated:false completion:nil];
    }

    return true;
}

在 iOS 7 中,这可以完美运行。但是,在 iOS 8 中,我在控制台中看到以下警告:

Unbalanced calls to begin/end appearance transitions for <LoginViewController: 0x7fca9340cbb0>.

我不太确定我需要做些什么来避免这个警告,同时仍然能够展示我的 LoginViewController。

我喜欢从window.rootViewController 进行演示,因为它允许我在用户登录时关闭LoginViewController,而无需向我的应用程序中的任何其他视图控制器添加完成/回调代码。

有什么想法吗?

【问题讨论】:

  • 谢谢。奇怪的是我在 iOS 7 中没有收到该警告。
  • 在 iOS7 中,这不是一个东西......一个东西......这就是你没有看到它的原因。 :)
  • 尝试使用 [self.window makeKeyAndVisible];就在展示您的导航控制器之前。

标签: ios objective-c ios7 uiviewcontroller ios8


【解决方案1】:

您需要延迟呈现视图控制器。我在我的一个项目中使用了这个技巧。

-(void)presentController
{
        UIViewController *login = [LoginViewController new];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:welcome];
        [self.window.rootViewController presentViewController:nav animated:false completion:nil];
}

使用带有延迟的 performSelector 调用此方法

 [self performSelector:@selector(presentController) withObject:self afterDelay:1.0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2018-02-27
    • 2015-08-09
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多