在启动时加载并呈现第二个视图控制器

Posted

技术标签:

【中文标题】在启动时加载并呈现第二个视图控制器【英文标题】: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 之上?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

如果您总是在viewWillAppearviewDidAppear 中显示第二个视图控制器,您将永远不会回到第一个视图控制器 @user25 这不是问题的要求。如果你想这样做,你可以有条件地显示第二个视图控制器。 那么默认日历应用程序如何实现这个***.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 的适当性。

【讨论】:

以上是关于在启动时加载并呈现第二个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将数据移动到另一个视图控制器,但第二个视图控制器在第一个视图控制器之前加载

如何让我的倒数计时器重置为每次视图加载时?

如何从弹出视图中关闭第二个视图控制器

从模态视图呈现视图控制器给出错误

Swift 仅在使用导航控制器首次启动时显示视图

无法在第二个视图控制器中更新我的 UIImage