【问题标题】:Load and Present a second viewcontroller at launch在启动时加载并呈现第二个视图控制器
【发布时间】:2018-01-25 16:20:02
【问题描述】:

我试图在启动时在第一个视图控制器之上呈现第二个视图控制器,而不关闭第一个。这个帖子Swift 3 - loading multiple ViewControllers at launch 看起来肯定有答案。建议:

添加你的主视图控制器

var secondViewController:UIViewController!

在你看来DidLoad:

secondViewController: UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourIdentifier") as! SecondViewController

就是这样。当你想展示它时,使用:

self.present(secondViewController, animated: true, completion: nil)  

例如,如果我将它作为一个动作附加到按钮上,这第三行就非常有用。但是,如果它在第一个 viewController 的 viewDidLoad: 中则不起作用。这就是我需要的。

如何在启动时将第二个 viewController 自动呈现在第一个 viewController 之上?

【问题讨论】:

    标签: ios swift uiviewcontroller swift4


    【解决方案1】:

    您需要在视图控制器的适当位置执行此操作。当你的视图控制器出现时,有几种方法会被调用,它们用于不同的任务。

    要展示另一个视图控制器,你应该把它放在viewWillAppear:viewDidAppear:,因为viewDidLoad: 在展示中太早了。

    在此处阅读有关这些方法的更多信息:

    https://stackoverflow.com/a/5659007/4543629

    【讨论】:

    • 如果您总是在viewWillAppearviewDidAppear 中显示第二个视图控制器,您将永远不会回到第一个视图控制器
    • @user25 这不是问题的要求。如果你想这样做,你可以有条件地显示第二个视图控制器。
    • 那么默认日历应用程序如何实现这个stackoverflow.com/questions/55315057/…
    【解决方案2】:

    我认为这取决于您要做什么。如果您想在启动时推送该 ViewController,您也可以尝试在 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 中的 AppDelegate 中展示它

    类似的东西:(就像我说的,这取决于你的用例)

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let secondViewController = storyboard.instantiateViewController(withIdentifier: "yourIdentifier") as! SecondViewController
        let navigationController = UINavigationController(rootViewController: SecondViewController)
        self.window?.makeKeyAndVisible()
        self.window?.rootViewController?.present(navigationController, animated: false, completion: {() -> Void in
            mainMenuVC.tabBarControl = tabBarController
            })
        return true
    }
    

    【讨论】:

      【解决方案3】:

      您可以转到 AppDelegate 和设置窗口,或者如果您使用情节提要拖动箭头到 ViewControler,您可以选择所需的内容

      【讨论】:

        【解决方案4】:

        是的,LGP 的第一条评论起到了作用。谢谢你。我在这里提出它作为答案。我在第一个 viewController 中添加了这个函数:

        override func viewDidAppear(_ animated: Bool) {
           super.viewDidAppear(true)
           self.present(secondViewController, animated: true, completion: nil)  
        }
        

        如果有人想发表评论,我在调用 super.viewDidAppear(true) 时没有考虑 true 或 false 的适当性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多