【发布时间】:2017-03-09 10:15:53
【问题描述】:
我只使用了两个视图控制器,比如viewControllerA 和viewControllerB。通过在AppDelegate.swift中使用如下代码,当App第一次启动时,将viewControllerA设置为初始viewController,从第二次开始,viewControllerB将设置为初始viewController。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
let defaultss = UserDefaults.standard
if (!defaultss.bool(forKey: "firstTimes")) {
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewControllerA")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
defaultss.set(true, forKey: "firstTimes") //set the key so it never executes again
} else
{
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewControllerB")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
}
return true
}
它工作正常。但是,如果我使用此代码,则无法使用以下代码以编程方式在视图控制器之间从 A 跳转到 B 或 B 到 A。
import UIKit
class ViewControllerA: UIViewController {
override func viewDidLoad()
{
super.viewDidLoad()
}
@IBAction func buttonA(_ sender: Any)
{
let ViewControllerB = storyboard?.instantiateViewController(withIdentifier: "ViewControllerB") as! ViewControllerB
navigationController?.pushViewController(ViewControllerB, animated: true)
}
}
import UIKit
class ViewControllerB: UIViewController {
override func viewDidLoad()
{
super.viewDidLoad()
}
@IBAction func buttonB(_ sender: Any)
{
let ViewControllerA = storyboard?.instantiateViewController(withIdentifier: "ViewControllerA") as! ViewControllerA
navigationController?.pushViewController(ViewControllerA, animated: true)
}
}
我怎样才能同时实现,我应该能够检测到第一次启动并设置初始 viewController,我也应该能够以编程方式在 viewController 之间跳转。
我使用的是 Xcode 8.2、Swift 3.0。
提前致谢。
【问题讨论】:
-
在将 UIViewController 设置为初始视图控制器作为根视图控制器之前将它们添加到 UINavigationController 中。
-
什么意思? @Dev_Tandel
-
查看@rv7284 的回答:这就是我的意思。
-
如果你想在视图控制器之间跳转,它们应该在导航控制器中。
-
这是第一步,我做到了。它也会导航到其他 viewController。问题是,只有当我在 AppDelegate.swift 中使用该启动检测代码时,它才无法导航。
标签: ios swift uiviewcontroller uinavigationcontroller