簡體   English   中英

如何制作一個空閑計時器來檢測UITextView中的編輯活動

[英]How to make a idle timer that detects editing activity in a UITextView

我想允許用戶在關閉應用程序之前在UITextView中輸入一些注釋。 但是他/她可能沒有輸入任何內容,或者他/她可能輸入了一些文本,然后停下來很長時間不執行任何操作。 在這兩種情況下,我都想關閉UITextView,保存一些內容並退出應用程序。 如何檢測用戶在一定時間內未輸入任何內容?

我試圖在等待時間后分派一個函數

static int idleSeconds = 8;

self.noteDoneTime = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * idleSeconds);
dispatch_after(self.noteDoneTime, dispatch_get_main_queue(), ^{ [self endNoteRequest]; });

但是每次用戶更改文本時都會更新派遣時間:

- (void)textViewDidChange:(UITextView *)textView {
    if (textView == self.noteView) {
        self.noteDoneTime = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * idleSeconds);
    }
}

但這是行不通的,因為初始設置后調度時間沒有得到更新,因此即使用戶繼續編輯文本,方法“ endNoteRequest”也會運行。 我想我需要取消調度請求並發出新的請求,但是我該怎么做呢?

還是有其他方法可以使空閑超時真正起作用?

我在游戲應用程序中執行類似的操作,在此過程中,每過10秒,用戶就會受到懲罰,而用戶不會移動游戲。 就像籃球中的“打鍾”,每次打球后都會重置。

使用NSTimer進行此操作最簡單,因為現在有了一個可以保留引用的對象(例如,實例屬性)。 當用戶鍵入某些內容時,您會使計時器無效,並將引用設置為nil。 現在不見了! 現在制作一個新的,並為其設置參考。 等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM