我想在延迟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中。这有什么问题?
使用以下代码加载下一个视图控制器,并从您想要的任何地方调用此loadNextVC
方法(viewDidLoad
或viewWillAppear
或任何其他方法(
func loadNextVC() {
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
// Code to push/present new view controller
}
}
使用布尔值来确保您的代码按下下一个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)
}
}
}
在您需要的每种情况下调用此方法。它只会推一次。