ioscocoa-touchuitextfielduitextfielddelegate

Action when the small cross button of UITextField is pressed


I can add a small cross button that is used to clear all the text in a single click in a UITextField with the following code.

textField.clearButtonMode = UITextFieldViewModeWhileEditing;

I also implemented UITextFieldDelegate.

I want to activate/deactivate the right bar button of the UINavigationBar according to the changes in my UITextField. The rule is simple: if the text field has at least one character, just enable the button, else disable it.

I implemented the UITextField's delegate method textField:shouldChangeCharactersInRange: to constantly check the requirement and update the status of the button.

Now my problem is, when I click the small cross button on the text field, the method textField:shouldChangeCharactersInRange: is not called. So the required action is missing. How can I identify the hit event of the clear button?

Some pictures to show what I'm talking about.

Initial stage: here, the "Done" button is disabled because there are no letters in the text field

When typing a letter, the "Done" button is enabled

Now, if I click on the clear button, the "Done" button is still enabled. This is wrong.


Solution

  • Use the delegate method textViewShouldClear::

    Asks the delegate if the text field’s current contents should be removed.

    - (BOOL)textFieldShouldClear:(UITextField *)textField
    

    Parameters

    textField
    

    The text field containing the text.

    Return Value

    YES if the text field’s contents should be cleared; otherwise, NO.

    Discussion

    The text field calls this method in response to the user pressing the built-in clear button. (This button is not shown by default but can be enabled by changing the value in the clearButtonMode property of the text field.) This method is also called when editing begins and the clearsOnBeginEditing property of the text field is set to YES.

    Implementation of this method by the delegate is optional. If it is not present, the text is cleared as if this method had returned YES. Availability

    * Available in iOS 2.0 and later.
    

    Declared In UITextField.h