【发布时间】:2020-06-07 21:12:08
【问题描述】:
我正在制作两个 ViewController,如何将 rootViewController 从 ViewController() 更改为 MainView()?这是我在 SceneDelegate 中的代码
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
window?.backgroundColor = UIColor.black
if isNewUser == true {
window?.rootViewController = ViewController()
} else {
window?.rootViewController = MainView()
}
当我在运行应用程序时同时测试 isNewUser = true 和 isNewUser = false 时,这工作正常。
在我的视图控制器中
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Show the welcome screen, blah.
//Accept the location, blah.
//After accepted everything, change isNewUser to false in UserDefault.Standard
print("App is restart")
}
}
class MainView: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
print("Welcome to AiOO!")
}
}
两者都可以正常工作,但是例如,当我完成接受协议或接受的位置时,第一次运行应用程序时会出现类似的情况...它将在 UserDefault.standard 中将 isNewUser 设置为 false。所以只有一件事我卡住了,我怎样才能重新启动应用程序或将 rootViewController 切换到 MainView()??
更新: RestartApp,当我单击“完成”按钮时没有运气,没有 UITabBarControl 并且在我杀死应用程序并再次打开之前不会调用 MainView,它可以工作:( 下面是我的完整代码:
在场景代理中:
var versioncheck = "1.0.0.0"
class SceneDelegate: UIResponder, UIWindowSceneDelegate, RestartApp {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
sceneRestore()
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
window?.backgroundColor = UIColor(named: "Main Background")
restartApp()
}
func restartApp() {
if !UserDefaults.standard.bool(forKey: "New User") {UserDefaults.standard.set(true, forKey: "New User")}
let isNewUser = UserDefaults.standard.bool(forKey: "New User")
print(isNewUser) // It will keep say "true" even change to false in UserDefault
if isNewUser == true {
window?.rootViewController = ViewController()
} else if versioncheck != "1.0.0.0" {
window?.rootViewController = NewUpdate()
} else {
window?.rootViewController = MainView()
}
}
}
视图控制器
protocol RestartApp {
func restartApp()
}
class ViewController: UIViewController {
var delegate: RestartApp?
override func viewDidLoad() {
super.viewDidLoad()
welcomePage()
}
}
当我点击“完成”按钮时,它会调用:
@objc func welcomeChangeGoToMain () {
UserDefaults.standard.set(false, forKey: "New User")
print(UserDefaults.standard.bool(forKey: "New User")) //It said "false"
welcomeTitle.removeFromSuperview()
welcomeSubline.removeFromSuperview()
welcomeNext.removeFromSuperview()
welcomeRequest.removeFromSuperview()
self.delegate?.restartApp()
}
【问题讨论】:
-
你不能重启应用,但是你可以给 rootViewController 属性分配一个新的视图控制器。
标签: ios swift class uiviewcontroller viewcontroller