延迟ios后导航到下一个视图控制器

时间:2018-02-16 09:16:29

标签: ios swift timer uiviewcontroller selector

我希望在延迟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中。这可能是什么问题?

2 个答案:

答案 0 :(得分:0)

使用以下代码加载下一个视图控制器,并从您想要的任何地方(loadNextVCviewDidLoad或任何其他方法)调用此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)
        }
    }
}

在您需要的每种情况下调用此方法。它只会推一次。