我希望在延迟3秒后导航到下一个视图控制器。它发生了,但它发生了两次!这是我的代码。
override func viewWillAppear(_ animated: Bool) {
let authToken = UserDefaults.standard.object(forKey:"token") as? String ?? ""
if (authToken.characters.count == 0) {
self.perform(#selector(ClassName.navigateToMobileScreen), with: nil, afterDelay: 3)
}
}
我在不同的场景中将它放在viewDidLoad和viewDidAppear中。这可能是什么问题?
答案 0 :(得分:0)
使用以下代码加载下一个视图控制器,并从您想要的任何地方(loadNextVC
或viewDidLoad
或任何其他方法)调用此viewWillAppear
方法
func loadNextVC() {
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
// Code to push/present new view controller
}
}
答案 1 :(得分:0)
使用布尔值确保推送下一个ViewController的代码只推送一次。
var isNextVcPushed = false
func pushNextVc() {
let authToken = UserDefaults.standard.object(forKey:"token") as? String ?? ""
if (authToken.characters.count == 0) {
if !isNextVcPushed {
isNextVcPushed = true
self.perform(#selector(ClassName.navigateToMobileScreen), with: nil, afterDelay: 3)
}
}
}
在您需要的每种情况下调用此方法。它只会推一次。