从另一个角度停止 NSTimer?

He *_*何一非 1 cocoa-touch nstimer ios swift

我想UIRequiredPassowrdViewController从另一个视图中停止一个 NSTimer SettingsTabelViewController,所以我首先创建倒计时:

class UIRequiredPassowrdViewController: UIViewController, UITextFieldDelegate {
    var timer: NSTimer?
    var remainingSeconds = 1000

    override func viewDidLoad() {
        super.viewDidLoad()

        timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer:", userInfo: nil, repeats: true)
    }

    func updateTimer(timer: NSTimer) {
        remainingSeconds -= 1
        println(remainingSeconds)
    }

    func StopTimerNotication(){
        println("Function Start!")
        timer?.invalidate()
        timer = nil
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我StopTimerNotication()从另一个角度调用函数SettingsTabelViewController

@IBAction func myButtonClicked(sender: AnyObject) {
    println("Button Clicked")
    var myClass: UIRequiredPassowrdViewController=UIRequiredPassowrdViewController()
    myClass.StopTimerNotication()
}
Run Code Online (Sandbox Code Playgroud)

我运行应用程序,日志显示正确倒计时,单击按钮并运行该功能,但计时器只是没有停止:

999
998
997
996
995
994
993
992
991
990
989
Button Clicked
Function Start!
988
987
986
985
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Eri*_*ian 5

myClass是一个新初始化的视图控制器,它与您启动计时器的视图控制器完全不同。所以为了解决你的问题,基本上你需要找到一种方法来告诉特定的视图控制器停止它的计时器。
这种情况有两种常见的解决方案:
(1) 使用通知:在您UIRequiredPassowrdViewController注册到特定通知时,我们称之为StopTimerNotification,当您收到此类通知时停止计时器。而在 SettingsTabelViewController,送出去StopTimerNotificationmyButtonClicked
(2) 使用委托:这里你需要一个简单的协议,让我们调用它StopTimerProtocol,它可能只有 on 方法func stopTimer()。并且您UIRequiredPassowrdViewController需要遵守此协议并实现该方法。然后添加一个delegate类型为id<StopTimerProtocol>to的属性SettingsTabelViewController. 之后,当你提出或推动SettingsTabelViewController之上UIRequiredPassowrdViewController设置的delegate属性。最后,在SettingsTabelViewControllermyButtonClicked只需调用self.delegate.stopTimer()