使用NSTimer注销应用程序

时间:2016-04-14 12:24:27

标签: ios swift uiviewcontroller nstimer uicontainerview

我有一个Login页面,它可以分离到应用程序的其余部分。 在我的应用程序的其余部分中,剩余的视图控制器从我自己定义的' BaseViewController`扩展。

我有以下问题?

 import UIKit

 class BsgBaseViewController: UIViewController {
 var nsTimerObj: NSTimer!
 func resetTimer(addTimeToTimeOutThread: NSTimeInterval){
    nsTimerObj?.invalidate()

    let nsTimerObjTemp = NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: "handleIdleEvent:", userInfo: nil, repeats: false)
    nsTimerObj = nsTimerObjTemp

 }


func handleIdleEvent(timer: NSTimer) {

        let createAccountErrorAlert: UIAlertView = UIAlertView()
        createAccountErrorAlert.delegate = self
        createAccountErrorAlert.title = ("Title")
        createAccountErrorAlert.message = "Due to the security policies your session has been timed out. We have to log you out."
        createAccountErrorAlert.addButtonWithTitle("OK")
        createAccountErrorAlert.show()

}

   override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("user touched")
    self.resetTimer(HardCodedValues().hardCodedTimeOutApplication)
}

override func viewDidAppear(animated: Bool) {
    self.resetTimer(HardCodedValues().hardCodedTimeOutApplication)
    print("appear")
}

override func viewWillDisappear(animated: Bool) {
    self.resetTimer(HardCodedValues().hardCodedTimeOutApplication)
    print("disappear")
}

}
  1. 单击touchesBegan()UITextField时,方法UITextView不会被触发。

  2. 我有一个设置UIViewController,其中UISegmentedControl包含两个容器和两个UIViewController。所有这三个UIViewController都来自我的BaseViewController。当我点击另外两个UIViewController创建BaseViewController的三个实例时,我想避免这种情况。

1 个答案:

答案 0 :(得分:1)

想到的第一个想法是创建一个InactivityMonitor类,并让app delegate创建一个实例。让它拥有计时器,并听取某种&#34;刷新&#34;通知。

视图控制器可以在触摸时发布这些通知,以便计时器可以重置。

您可能还需要控制器作为文本字段和视图的委托,以便他们也可以发布有关此类活动的通知。事实上,最困难的部分可能是识别需要注意的所有用户活动,具体取决于您拥有的UI元素类型。

我想要考虑的另一件事是你的规则应该如何应用于后台/前台应用程序事件。