ios - 在 iOS 8 中不显示第一个 View Controller 而转到另一个 View Controller

标签 ios ios8 storyboard segue uistoryboardsegue

我正在尝试了解 iOS 8 中的新 segues。我有一个最初显示典型登录屏幕的应用程序,如果用户已登录,则该屏幕不应显示(即使是一瞬间),用户应该在提要屏幕上,我正在从初始登录屏幕继续。

但是,我不能做我想做的事。首先,我只能使用 Present Modally 转场,因为它是唯一允许移除动画的合适转场。取决于我尝试在 View Controller 生命周期中进行 segue 的位置,它要么在最初显示登录屏幕一瞬间后进行 segue,要么根本不进行 segue。

我对 viewDidAppear: 不太满意,因为它总是在显示初始 View Controller 后执行。

我正在研究 viewDidLoadviewWillAppear: 但我在两者上都得到了这个(但没有任何反应):

Warning: Attempt to present <UITabBarController: 0x12c617920> on <ViewController: 0x12c610590> whose view is not in the window hierarchy!

如何在不显示初始 View Controller 的情况下显示另一个 View Controller ,即使是一瞬间?

最佳答案

我已经开发了 50 多个应用程序,它们具有更多我可能想要的 UI。一开始,我也是这样设计 UI 的——先有登录 Controller ,然后做 seque,删除登录 Controller 。问题是如果你的导航树变得更复杂,将登录 Controller 作为你的根开始出现严重的问题。

UI 调度程序

所以我现在使用的是将我最常用的 View Controller 作为我的根(在你的情况下,这将是提要 - 但它也可以是 TabBarVC,导航 Controller 等),并将登录 Controller 作为模态视图未以任何方式连接到该导航链。然后,我有 Singleton 来控制应用程序中的 UI 流(如果您有包含多个 Storyboard的更大项目,我建议您这样做)。

单例所做的是在应用程序启动时,它会检查初始条件是否应该显示登录表单,如果是,它会从 Storyboard 中获取它(使用 Storyboard ID)+ 将其呈现为模态(非动画)。这样,登录在第一次抽奖时始终可见,但如果您不想,则不必这样做。您也不必更改导航树/初始 View Controller 。

要从 Storyboard 获取 Controller ,您可以使用这样的东西:

// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
// MARK: - Login

func showLoginIfNeededAnimated(animated : Bool, completion : (() -> Void)?) {

    // Show login if user is not logged-in, for example
    if loginShouldAppearCondition {

        // Instantiate login VC from storyboard
        let storyboard : UIStoryboard = UIStoryboard(name: APPLICATION_UI_STORYBOARD_NAME_IPHONE_MAIN_FLOW, bundle: NSBundle.mainBundle())
        let loginVC : LoginVC = storyboard.instantiateViewControllerWithIdentifier(STORYBOARD_NAME_LOGIN) as! LoginVC

        // Present it
        self.baseController.presentViewController(baseNC, animated: animated, completion: completion)

        *Note - keep reference for login because of ARC!
    }
}

我注意到 Facebook 在他们的应用程序中使用了类似的东西,尽管我不能确定他们的实现(我觉得我喜欢它是因为他们制作动画的方式)。

说到动画,您可以说它没有为您提供推送动画 - 好吧,如果您愿意,您可以随时编写自己的动画,但您也可以创建更奇特的效果。有 great tutorial关于该主题 ( and also here ),因此您可以检查它以了解一些有趣的东西,并可能使您的应用程序变得更好。

希望对您有所帮助,有任何问题,尽管提问!祝你好运:)

关于ios - 在 iOS 8 中不显示第一个 View Controller 而转到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514195/

相关文章:

iOS 分发证书

iOS : How to upload an image from a URL to Parse?

python - 了解netlib fftpack的结果

ios - 如何使用 CodePush 为 React Native 部署任意资源

iOS 8 欧洲/莫斯科时区问题

ios - Swift:向按钮添加渐变后按钮图像不显示

ios8 - 如何在横向模式下使用 Touch ID?

ios - UIActivityViewController 不显示在 iPhone + iOS 8

iphone - UITextField 不占用整个屏幕宽度

ios - toolsVersion ="11201"弄乱了我的 Storyboard