好的,我知道当applicationWillEnterForeground从我的AppDelegate触发时,我可以触发事件。我想做的是强制应用程序在从背景重新显示时显示某个视图。视图是一个名为loginViewController的UIViewController,它的故事板ID为“initViewController”
我的问题是,当应用程序再次成为焦点时,我在此函数(applicationWillEnterForground)中使用什么来加载此视图?感谢。
答案 0 :(得分:2)
我从来没有这样做过,但你可以通过将UIViewController添加到UIViewController堆栈来完成它,如果你只是想添加一个视图控制器并显示它的视图(参见案例1)或者通过替换根视图控制器,如果要丢弃现有的视图控制器堆栈并使用新的(参见案例2)
案例1)在第一种情况下,您需要引用要创建其父视图控制器的UIViewController。您可以将其保存在某个静态变量中,或者如果您只是计划在应用程序重新启动时显示临时视图,那么您可以获取对根视图控制器的引用,将其用作父级:
// get a reference to the main storyboard
let mainSB = UIStoryboard(name: "Main", bundle: nil)
// get a reference to the root view controller
if let rootVC = UIApplication.sharedApplication().keyWindow?.rootViewController,
// get a reference to the view controller using identifier
initVC = mainSB.instantiateViewControllerWithIdentifier("initViewController") as? UIViewController {
// present the view controller
rootVC.presentViewController(initVC, animated: false, completion: nil)
}
完成后,在视图控制器中使用逻辑来关闭它,并且您的用户应该回到他们开始的位置:
self.dismissViewControllerAnimated(true, completion: nil)
案例2)您可以通过替换根视图控制器并手动构建堆栈来丢弃现有的视图控制器堆栈并启动新的控制器堆栈。按顺序显示视图控制器,并将动画参数设置为false。
// get a reference to the main storyboard
let mainSB = UIStoryboard(name: "Main", bundle: nil)
// get references to view controllers
if let vc1 = mainSB.instantiateViewControllerWithIdentifier("vc1") as? UIViewController,
vc2 = mainSB.instantiateViewControllerWithIdentifier("vc2") as? UIViewController {
// set root view controller
UIApplication.sharedApplication().keyWindow?.rootViewController = vc1
// build up the view controller stack by adding next vc
vc1.presentViewController(vc2, animated: false, completion: nil)
}
导航控制器
如果您的某个视图控制器是导航控制器,则需要将其转换为导航控制器,然后将任何视图控制器推送到导航控制器上。导航控制器有自己的堆栈。
if let myNavCon = mainSB.instantiateViewControllerWithIdentifier("nav") as? UINavigationController {
// push view controller onto navigation controller stack
myNavCon.pushViewController(someViewController, animated: false )
}
警告强>
这根本不涉及你的应用程序的模型(只有UI)。您还需要设置您在prepareForSegue等中设置的任何数据。当您以编程方式和通过故事板segue呈现VC时,使用的简单系统是采用本来准备segue和移动的代码它是您自己的实例方法,它将对子视图控制器的引用作为其参数。然后,您可以在使用目标视图控制器之前将其从prepare调用到segue,或者在呈现视图控制器之前从代码调用它。
此代码均未经过测试。它是直接通过网站写的。它可能包含错别字。请告诉我,以便我可以解决任何问题。