2017-09-02 69 views
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?

+0

只是因爲你現在VC-B並不意味着你的VC-A停止運行的定時器。你不能彈出一個呈現另一個視圖控制器的視圖控制器。你正在使用「self.present」,self = VC-A,如果VC-A提供了一些內容,並且你想同時彈出它,那麼這是合乎邏輯的?你需要閱讀教程並研究一切如何運作,所以你可以發佈一個問題,表明你至少已經完成了作業。如果你沒有研究過事物的運作方式,給你一個解決方案不會教你或者有什麼好處,反之則相反。無論如何你在這裏得到了答案。 GL – 2017-09-02 13:54:22

+0

@Sneak我應該閱讀什麼?我應該怎麼做才能停止View ControllerA上的定時器? – sinusGob

+0

您需要閱讀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

回答

0

試試這個代碼 -

class ViewControllerA: UIViewController { 
    var timer : Timer! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // it runs this function every 5 seconds 
     timer = 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 { 
      timer.invalidate() 
      self.present(vc, animated: true, completion: nil) 
     } 

    } 

    func printNumber() { 
     print(0) 
    } 
} 
相關問題