在UITextView
有一個更改事件來處理按鍵。但UITextField
沒有這樣的事件。如何檢測UITextField中的KeyPress事件?
如何檢測UITextField
中的KeyPress事件?
有一種方法描述here使用通知,但我有的問題是,我不能退訂TextFieldTextDidChangeNotification。
在UITextView
有一個更改事件來處理按鍵。但UITextField
沒有這樣的事件。如何檢測UITextField中的KeyPress事件?
如何檢測UITextField
中的KeyPress事件?
有一種方法描述here使用通知,但我有的問題是,我不能退訂TextFieldTextDidChangeNotification。
我不確定哪個是你的問題。第一個您似乎已經回答自己,即 解決方案(從您的鏈接)是使用NSNotificationCenter.DefaultCenter.AddObserver
。
第二個是約取消訂閱 - 如果您想停止觀察,應該調用上一個方法副本,即NSNotificationCenter.DefaultCenter.RemoveObserver
。
只需保留從AddObserver
返回的對象,以便您可以將其提供給RemoveObserver
。
注:如果我不明白你的問題正確,請使用編輯,並添加你想要達到什麼樣的一些細節和/或代碼,我們會盡我們最大的努力幫助:-)
看那UITextFieldDelegate
實施該協議。它爲所有文本字段更改回調方法。
沒有像按鍵一樣工作的事件 –
我能夠使用'textField:shouldChangeCharactersInRange:replacementString:'方法每一次按鍵,儘可能接近我所知道的。儘管如此,令人失望的是你必須研究'replacementString:'值,因爲當發送這個消息時'textField.text'屬性不會被更新。 – colinta
由於colinta建議,做到這一點
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"range = %@, replacement = %@, text = %@", NSStringFromRange(range), string, text);
return YES;
}
和
- (BOOL)textFieldShouldClear:(UITextField *)textField {
NSLog(@"clear text");
return YES;
}
如果輸入經拼寫建議更改,它也會起作用。
如果您需要響應文本字段編輯範圍之外的按鍵,這將不起作用。例如,假設您需要捕獲單個按鍵並移至下一個字段。你不能用這種方法做到這一點。你必須使用鍵盤事件。 –
觀察UITextField
變化最徹底的方法是
_textField.AddTarget((sender, e) =>
{
// Do your stuff in here
}, UIControlEvent.EditingChanged);
您不必訂閱全系統的通知中心,你不必註銷,當你destroing文本字段觀察員。
希望這將有助於未來的人:)
感謝poupou,我跳了一下,可能有一個更簡單的方法。在從AddObserver返回的對象上持有引用我能夠退訂通知 –