我有5个ViewControllers(A,B,C,D,E),所有这些ViewController都通过编程方式连接,我可以成功地将它们推和弹出。
>使用:
navigationController?.pushViewController(loginVc, animated: true)
_ = navigationController?.popViewController(animated: true)
注意: ViewController A首先出现为默认的初始Viation Controller。
现在,我想要的是,当用户安装应用程序时,仅首次必须将ViewController A显示为初始View Controller,其余时间在打开应用程序时,ViewController D必须是初始ViewController,从那里我应该能够在以前的ViewControllers之间跳跃。我该如何实施。我使用Xcode 8.2,Swift 3.0
预先感谢。
为了做到这一点,您只需使用以下代码向NSUSERDEFAULTS添加布尔值:
let defaults = UserDefaults.standard
if (!defaults.bool(forKey: "firstTime")) { //will be false if does not exist yet
navigationController?.pushViewController(yourDesiredVC, animated: true) //push desired vc
defaults.set(true, forKey: "firstTime") //set the key so it never executes again
} else {
navigationController?.pushViewController(yourDesiredVC, animated: true) //push the other vc
}
您的问题实际上不会说太多,没有某些代码,但是一个建议(鉴于问题的当前质量)是使用UserDefaults
。将您当前版本的应用程序添加到称为e.g的密钥中LatestVersion
。在启动时将其与应用当前版本进行比较,如果不匹配,请显示ViewControllerA
,如果不显示ViewControllerB
。
另一种方法只是保存launchedForFirstTime
。如果它不设置show ViewControllerA
,但是上述内容将在您可能想显示该视图的应用程序的未来版本中进行。
您可以在UserDefaults中保留一个值,以跟踪返回的用户并检查是否存在:
if let returning :Bool = UserDefaults.standard.bool(forKey: "initial_controller_shown") {
//returning user flow
} else {
//new user flow
}
在ApplicationDidBecomeycometive或didfinishlaunchingwithoptions
第一次启动应用程序时,请使用标志并在其中存储一些值,以便下次您的应用程序运行时,您可以检查用户是第一次访问该应用程序还是不..之后,然后转到AppDelegate并将以下代码粘贴到didfinishlaunchingwithoption中...
if yourFlag == true
{
let mainStoryboard: UIStoryboard = UIStoryboard(name: "MainStoreyBoard", bundle: nil)
let controller = mainStoryboard.instantiateViewController(withIdentifier: "StoreyBoardIdofYourViewController") as! UINavigationController
self.window?.rootViewController = controller
}
这将启动D ViewController ....
您可以在应用程序delegate.m
文件中检查它,是否已安装的第一次view Controller A
将显示为初始视图控制器,否则视图控制器D
。检查以下功能:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//check the initial view controller here//
return true
}
swift 3:
let launchBefore = UserDefaults.standard.bool(forKey: "launchBefore")
if launchBefore {
print("Not first launch.") } else {
print("First launch, setting UserDefault.")
UserDefaults.standard.set(true, forKey: "launchBefore") }
您正在使用一个导航控制器,因此很难实施您的行为。您将使用单独的视图控制器进行视图A和D并使用:
来调用它们会更容易。present(vc, animated: true)
并解散致电:
dismiss(animated: true)