ios - 从另一个角度停止 NSTimer?

标签 ios swift cocoa-touch nstimer

我想从另一个 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 , 发出 StopTimerNotificationmyButtonClicked .
(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/

相关文章:

ios - Firebase AppCheck 的目的是什么?

objective-c - 线程 1 : EXC_BREAKPOINT (code=EXC_i386_BPT, subcode=0x0) 错误

objective-c - 带有核心数据的 iPhone 应用程序。如何连接和交换数据?

iphone - 如何在 NSUserDefaults 中设置 NSArray?

ios - 如何获取单元格或任何 subview 的相对屏幕坐标?

ios - Swift 解码具有多种不同格式的数据类型

ios - 在模拟器中单击后文本字段不起作用

ios - 使用 EXIF 数据的 Swift base64 图像编码

android - iOS 或 Android 应用程序可以与其他应用程序交互推送通知吗?

ios - 需要CFReadStream block ,直到未填充缓冲区大小