在启动时加载并呈现第二个视图控制器
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
【讨论】:
如果您总是在viewWillAppear
或viewDidAppear
中显示第二个视图控制器,您将永远不会回到第一个视图控制器
@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 的适当性。
【讨论】:
以上是关于在启动时加载并呈现第二个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章