In UITextView
there is a Changed event to handle keypress. However the UITextField
has not such event.
How can I detect a KeyPress event in UITextField
?
There is a method described here using notifications, however the problem I have is that I cannot unsubscribe from the TextFieldTextDidChangeNotification.
I'm not sure which is your question. The first one you seem to have answered yourself, i.e.
the solution (from your link) is to use NSNotificationCenter.DefaultCenter.AddObserver
.
The second is about unsubscribing - if you want to stop observing you should call the previous method counterpart, i.e. NSNotificationCenter.DefaultCenter.RemoveObserver
.
Just keep the object returned from AddObserver
so you can supply it to RemoveObserver
.
note: If I did not understand your question correctly please use edit and add some details and/or code of what you want to achieve and we'll do our best to help :-)
As colinta suggested, do this
- (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;
}
and
- (BOOL)textFieldShouldClear:(UITextField *)textField {
NSLog(@"clear text");
return YES;
}
It will also work if the input was changed via spelling suggestions.
Look at the UITextFieldDelegate
http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html
Implement that protocol. It has call back methods for all the text field changes.
The cleanest way to observe UITextField
changes is
_textField.AddTarget((sender, e) =>
{
// Do your stuff in here
}, UIControlEvent.EditingChanged);
You don't have to subscribe to a system-wide notification center and you don't have to unregister observer when you're destroing a text field.
Hope this will help someone in the future :)