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:
- textFieldDidEndEditing: enables the button when the previous uitextfield resigns first responder (so with the zero chars in the current uitextfield).
- textFieldShouldBeginEditing: is called when the textfield becomes the first responder. Is there another way to do this?
[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.
try and go with:
}
This answer was marked correct when infact a better solution existed by 'w4nderlust' below. This answer is theirs, let them take the credit!
Actually, in Xcode 6.x is sufficient to flag in ON Auto-enable Return Key
This answer seems to be working in all scenarios. Single character, clear and all changes. Hope someone finds this helpful.
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.@MasterBeta: Almost correct. Follow his instructions to connect an action to Editing Changed, but this code is simpler and has no typos:
Swift 2.2
You can assign custom method "checkTextField()" to "myTextField" UITextField as:
and toggle the done button inside the method as:
No need of any delegate.