我正在爲我的兒子開發一個小型兒童遊戲,涉及虛擬鍵盤上的計時。在虛擬鍵盤上檢測按鍵
是否可以檢測虛擬鍵盤上的按鍵何時被按下?即獲得觸摸通知(touchesBegan)?我不需要知道哪個按鍵被按下,只要按下按鍵動作開始。
我正在爲我的兒子開發一個小型兒童遊戲,涉及虛擬鍵盤上的計時。在虛擬鍵盤上檢測按鍵
是否可以檢測虛擬鍵盤上的按鍵何時被按下?即獲得觸摸通知(touchesBegan)?我不需要知道哪個按鍵被按下,只要按下按鍵動作開始。
無法直接從虛擬鍵盤獲取觸摸事件。但是,您可以使用屏幕外的UITextField
,以便它不可見並請撥打becomeFirstResponder
來顯示鍵盤。然後,如Khomsan建議的那樣,您可以實現委託方法textView:shouldChangeTextInRange:
,以便在按下某個鍵時得到通知。
更清晰的可能性是編寫實現UIKeyInput
協議的自定義UIControl
。你只需要提供insertText:
,deleteBackward
和hasText
的實現(對於這個,你可以簡單地總是返回YES
)。爲了使鍵盤可見,您需要再次撥打becomeFirstResponder
作爲您的自定義控件。
這兩種方法的共同之處在於,只有在密鑰爲時纔會通知(以便輸入文本),而不是在觸摸實際開始時纔會通知您。正如我所說,直接獲取tochesBegan
事件是不可能的。如果你需要的話,你可能不得不實現你自己的屏幕鍵盤。
是的,你可以只使用:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//do what you need
[super touchesBegan:touches withEvent:event];
}
我還需要添加什麼來從UITextView獲取這些事件? – peterparnes
這隻會在您自己的視圖中檢測到觸摸,而不是虛擬鍵盤。 – omz
放下你要放的地方。 – Cyprian
對於TextView中可以使用...
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
- (void)textViewDidChange:(UITextView *)textView
對於文本字段可以使用...
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
見UITextViewDelegate和Apple網站上的UITextFieldDelegate。
謝謝。這證實了我懷疑這是不可能的(沒有自定義鍵盤)。我已經有一個關鍵釋放案例的解決方案(textView:shouldChangeTextInRange :)。 是否可以在鍵盤上放置透明視圖,還是浪費時間來嘗試? – peterparnes
我想這是可能的,但是你需要爲此創建另一個'UIWindow',因爲鍵盤有它自己的窗口,所以你平常的視圖層次結構中的任何視圖都會在它下面。 – omz
謝謝!欣賞答案! – peterparnes