我刚刚开始使用Swift(新手)开发一个新的应用程序。我有
Navigation Controller
连接到两个segues
,主页和注册。ViewController.swift
内viewDidLoad
内我决定拨打哪个电话我的Main.Storyboard
没有rootViewController
,我需要决定在运行时显示哪个viewController
。
if (Settings.hasRegistrationCompleted()) {
performSegue(withIdentifier: "Home", sender: nil)
} else {
performSegue(withIdentifier: "Registration", sender: nil)
}
我的问题
答案 0 :(得分:5)
这里需要识别的两件事
<强>第一强>
检查您的情节提要名称Main.storyboard
是否已正确附加在Target -> general -> Deployment Info -> main Interface
中,例如
<强>第二强>
检查与导航控制器连接的初始VC并确保初始VC为根控制器
更新回答
最初为每个VC设置Stroryboard ID
在更改appdelegate中的Root控制器之后
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
// Override point for customization after application launch.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootViewController: UIViewController?
if (Settings.hasRegistrationCompleted()) {
rootViewController = storyboard.instantiateViewController(withIdentifier: "HomeVC")
}else
{
rootViewController = storyboard.instantiateViewController(withIdentifier: "RegistrationVC")
}
let navigation = UINavigationController(rootViewController: rootViewController!)
self.window?.rootViewController = navigation
self.window?.makeKeyAndVisible()
return true
}
答案 1 :(得分:1)
您还可以对UINavigationController
进行子类化并将其设置为故事板。删除segues(你不需要它们)
然后
class ViewController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
if (Settings.hasRegistrationCompleted()) {
let homeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeVC")
self.setViewControllers([homeVC!], animated: false)
}
else {
let regVC = self.storyboard?.instantiateViewController(withIdentifier: "RegistrationVC")
self.setViewControllers([regVC!], animated: false)
}
}
}
答案 2 :(得分:1)