我想从另一个 View SettingsTabelViewController
停止 UIRequiredPassowrdViewController
中的 NSTimer,所以我首先创建倒计时:
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
}
}
然后我从另一个 View SettingsTabelViewController
调用函数 StopTimerNotication()
:
@IBAction func myButtonClicked(sender: AnyObject) {
println("Button Clicked")
var myClass: UIRequiredPassowrdViewController=UIRequiredPassowrdViewController()
myClass.StopTimerNotication()
}
然后我运行该应用程序,日志正确显示倒计时,单击按钮并运行该功能,但计时器只是没有停止:
999
998
997
996
995
994
993
992
991
990
989
Button Clicked
Function Start!
988
987
986
985
我该如何解决这个问题?
最佳答案
myClass
是一个新初始化的 View Controller ,它与您启动计时器的 View Controller 完全不同。所以要解决你的问题,基本上你需要找到一种方法来告诉特定的 View Controller 停止它的计时器。
对于这种情况,有两种常见的解决方案:
(1) 使用通知:在你的UIRequiredPassowrdViewController
注册一个特定的通知,我们称之为StopTimerNotification
,当您收到此类通知时,停止计时器。而在 SettingsTabelViewController
, 发出 StopTimerNotification
在 myButtonClicked
.
(2) 使用delegate:这里需要一个简单的协议(protocol),我们称它为StopTimerProtocol
这可能只有方法 func stopTimer()
.还有你的UIRequiredPassowrdViewController
需要遵守这个协议(protocol)并实现那个方法。然后添加一个delegate
id<StopTimerProtocol>
类型的属性至 SettingsTabelViewController
.之后,当您出示或推送 SettingsTabelViewController
时在 UIRequiredPassowrdViewController
之上设置delegate
属性(property)。最后,在SettingsTabelViewController
什么时候myButtonClicked
只需调用 self.delegate.stopTimer()
关于ios - 从另一个角度停止 NSTimer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066094/