I would like to enable the done button on the navbar (in a modal view) when the user writes at least a char in a uitextfield. I tried:
[EDIT]
The solution could be
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
but neither
[self.navigationItem.rightBarButtonItem setEnabled:YES];
or
[doneButton setEnabled:YES]; //doneButton is an IBOutlet tied to my Done UIBarButtonItem in IB
work.
But shouldChangeCharactersInRange
won't be called when user press clear button of text field control. And your button should also be disabled when text field is empty.
A IBAction
can be connected with Editing Changed event of text field control. And it will be called when users type or press clear button.
- (IBAction) editDidChanged: (id) sender {
if (((UITextField*)sender).text.length > 0) {
[yourButton setEnabled:YES];
} else {
[yourButton setEnabled:NO];
}
}
The correct code is;
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger length = editingTextField.text.length - range.length + string.length;
if (length > 0) {
yourButton.enabled = YES;
} else {
yourButton.enabled = NO;
}
return YES;
}
Edit: As correctly pointed out by MasterBeta before and David Lari later, the event should respond to Editing Changed. I'm updating the answer with David Lari's solution as this was the one marked as correct.
- (IBAction)editingChanged:(UITextField *)textField
{
//if text field is empty, disable the button
_myButton.enabled = textField.text.length > 0;
}
@MasterBeta: Almost correct. Follow his instructions to connect an action to Editing Changed, but this code is simpler and has no typos:
- (IBAction)editingChanged:(UITextField *)textField
{
//if text field is empty, disable the button
_myButton.enabled = textField.text.length > 0;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With