2016-01-25 37 views
1

我想創建一個UIViewController,它有一個超時時間,在一段時間後將展開一個segue,但檢測到屏幕活動並重置定時器的時間。想想一個密碼輸入屏幕,如果設備在那裏閒置,您希望屏幕超時。我想iphone/ipad會超時,然後當你解鎖並回到那個應用程序時,我想讓segue在這種情況下放鬆一下。什麼是最好的方法呢?如何通過UIViewController檢測屏幕活動(Swift,iOS 9)

回答

5

Decalare定時器

var timer = NSTimer() 

在你viewDidLoad DO設置爲任何你喜歡的

這裏terminateApp將在60秒

timer = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: Selector("terminateApp"), userInfo: nil, repeats: true) 

func terminateApp(){ 
    // Do your segue and invalidate the timer 
    timer.invalidate() 
} 

但是,如果用戶按下後調用計時器查看你想要使定時器無效並啓動一個新的定時器,請通過以下方式執行:

在你viewDidLoad當用戶觸摸屏幕加gestureRecognizer將調用ResetTimer函數:

let resetTimer = UITapGestureRecognizer(target: self, action: "resetTimer"); 
self.view.userInteractionEnabled = true 
self.view.addGestureRecognizer(resetTimer) 

func resetTimer(){ 
    // invaldidate the current timer and start a new one 
    timer.invalidate() 
    timer = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: Selector("terminateApp"), userInfo: nil, repeats: true) 
} 
+1

在應用程序內不活動的好回答 –

1

您可以註冊您的視圖控制器UIApplicationDidBecomeActiveNotification

NSNotificationCenter.defaultCenter().addObserver(self, selector: "yourFunction", name: UIApplicationDidBecomeActiveNotification, object: nil) 

或調用相關功能在您的視圖控制器從您的AppDelegate中的applicationDidBecomeActive

你也可以在applicationDidResignActive被調用時處理事情,當你去背景而不是當你回來時做某事。如果用戶接通電話等,這有利於立即改變,而不是等待定時器。您可以使用計時器方式,在應用程序仍在屏幕上時處理非活動狀態 - 然後使用應用程序委託方法在應用程序停止活動時使計時器失效。

0

根據您嘗試支持的交互,您有幾個選項。

要檢測可能需要設置你的UIViewControllerview是一些客戶UIView子類覆蓋-hitTest:withEvent:報告觸摸交互到它的控制器或其他一些代表接觸。或者,您可以定義一個手勢識別器來報告該視圖中的觸摸。任何一個人都會檢測控制器子視圖上的觸摸,但不一定是鍵盤事件(不是來自不屬於控制器視圖層次結構或來自硬件鍵盤的屏幕鍵盤)。

對於鍵盤事件,您可能需要依賴UITextFieldDelegate和它的-textField:shouldChangeCharactersInRange:replacementString:。我不能立即想到應用程序或查看廣泛的方法來檢測這些輸入。

要檢測設備被鎖定或應用程序失去焦點,您可能需要對UIApplicationWillResignActiveNotification通知作出響應。

你想要哪些需要比我可以從你的問題提取更多的細節。