【问题标题】:Set root view controller to a modal view controller将根视图控制器设置为模态视图控制器
【发布时间】:2015-02-10 16:28:20
【问题描述】:

如果没有用户登录,我想向用户显示模式视图控制器。这是我的方法实现:

func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
{
    //  Notifications
    //
    //      User
    //
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "noCurrentUser:", name: UserCurrentUserNotSetNotificationName, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "currentUserDidChange:", name: UserCurrentUserDidChangeNotificationName, object: nil)

    //  Root window
    //
    if managedObjectContext != nil && User.currentUser(managedObjectContext!) == nil
    {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        if let logInViewController = storyboard.instantiateViewControllerWithIdentifier("Log In View Controller") as? LogInViewController
        {
            window?.rootViewController?.presentViewController(logInViewController, animated: false, completion: nil)
        }
    }

    return true
}

我包含通知是因为目前,noCurrentUser: 方法以模态和动画方式显示我的登录视图控制器。这很好用,除非当应用启动时,用户在发送通知之前会看到应用(根视图控制器)的闪烁,并在视图控制器中显示模式日志。

我尝试在呈现时将模态动画选项设置为 false,但因为它不是根视图控制器,所以这仍然不起作用。

那么我如何正确地将根视图控制器设置为模态视图控制器,然后我可以模态地关闭它。

【问题讨论】:

  • 我在另一个问题中提供了一个类似问题的答案:stackoverflow.com/q/26355847/1652710 当然,这是在 Obj-C 中,但希望您可以将它转化为在 Swift 中解决您的问题的有效解决方案。

标签: ios swift modalviewcontroller


【解决方案1】:

你不能。根视图控制器应被视为应用程序的可视化表示。制作这个模态意味着你的应用程序本身就是模态的,显然不是这样。

您真正希望能够做的是将模态视图控制器作为用户看到的第一件事。这与作为根视图控制器不同。

将根视图控制器设置为常规视图控制器(或导航控制器),然后将模态视图控制器推送到它上面。当模态视图控制器关闭时,您的应用程序可能会开始。

【讨论】:

  • 那么如何以及在哪里管理视图控制器中的日志?例如,如果 VC 是由通知以模态方式呈现的,我应该以模态方式将其关闭,如果它作为导航控制器呈现,我想在标签栏控制器上推送
  • 我应该在视图控制器中使用协议登录并通过委托管理呈现视图控制器中的解雇吗?
  • 我不清楚你在问什么。当您的应用程序启动时,将模态视图控制器推送到您的根视图控制器上。当它关闭时,处理结果并决定去哪里。
  • 我的根视图控制器是一个标签栏控制器,在它上面显示视图控制器会引发错误2015-02-10 17:02:23.338 MyApp[242:13441] Warning: Attempt to present <LogInViewController: 0x13dd30a00> on <MainTabBarController: 0x13dd0bc90> whose view is not in the window hierarchy!
  • 您尚未将您的MainTabBarController 指定为根视图控制器和/或您尚未推送它。您不能将模态视图控制器推送到尚未推送到屏幕的视图控制器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多