0
讓說我有兩個視圖控制器,查看控制器A和視圖控制器B如何彈出初始視圖控制器
class ViewControllerA: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// it runs this function every 5 seconds
Timer.scheduledTimer(5, target: self,selector: #selector(ViewControllerA.printNumber), userInfo: nil, repeats: true)
}
@IBAction func callViewControllerBButtonClicked(_ sender: UIButton) {
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerBID") as? ViewControllerB {
self.present(vc, animated: true, completion: nil)
}
}
func printNumber() {
print(0)
}
}
只要有人點擊callViewControllerBButtonClicked()
按鈕,就會實例化一個新的視圖控制器,它是ViewControllerB和排序將其呈現在ViewControllerA之上。那我面對現在的問題是,即使我已經在ViewControllerB,它仍然運行這個功能
Timer.scheduledTimer(5, target: self,selector: #selector(ViewControllerA.printNumber), userInfo: nil, repeats: true)
如何彈出ViewControllerA?
只是因爲你現在VC-B並不意味着你的VC-A停止運行的定時器。你不能彈出一個呈現另一個視圖控制器的視圖控制器。你正在使用「self.present」,self = VC-A,如果VC-A提供了一些內容,並且你想同時彈出它,那麼這是合乎邏輯的?你需要閱讀教程並研究一切如何運作,所以你可以發佈一個問題,表明你至少已經完成了作業。如果你沒有研究過事物的運作方式,給你一個解決方案不會教你或者有什麼好處,反之則相反。無論如何你在這裏得到了答案。 GL – 2017-09-02 13:54:22
@Sneak我應該閱讀什麼?我應該怎麼做才能停止View ControllerA上的定時器? – sinusGob
您需要閱讀UIViewControllers的工作原理。或者您正在呼叫/編碼的方法,即存在。 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621380-presentviewcontroller和你的計時器:https://developer.apple.com/documentation/foundation/timer/1415405-invalidate。例如,您可以在呈現之前使您的計時器無效(如下面的人回答)。或者,您可以使viewDidDissapear上的計時器無效https://developer.apple.com/documentation/uikit/uiviewcontroller/1621477-viewdiddisappear。只要谷歌mehods你會發現所有的答案 – 2017-09-02 14:00:08