我有一个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")
}
}
单击touchesBegan()
或UITextField
时,方法UITextView
不会被触发。
我有一个设置UIViewController
,其中UISegmentedControl
包含两个容器和两个UIViewController
。所有这三个UIViewController
都来自我的BaseViewController
。当我点击另外两个UIViewController
创建BaseViewController
的三个实例时,我想避免这种情况。
答案 0 :(得分:1)
想到的第一个想法是创建一个InactivityMonitor
类,并让app delegate创建一个实例。让它拥有计时器,并听取某种&#34;刷新&#34;通知。
视图控制器可以在触摸时发布这些通知,以便计时器可以重置。
您可能还需要控制器作为文本字段和视图的委托,以便他们也可以发布有关此类活动的通知。事实上,最困难的部分可能是识别需要注意的所有用户活动,具体取决于您拥有的UI元素类型。
我想要考虑的另一件事是你的规则应该如何应用于后台/前台应用程序事件。