Enabling done button after inserting one char in a textfield: textFieldDidEndEditing: or textFieldShouldBeginEditing: or?

后端 未结 7 1662
迷失自我
迷失自我 2020-12-28 08:43

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:
相关标签:
7条回答
  • 2020-12-28 09:15

    This answer seems to be working in all scenarios. Single character, clear and all changes. Hope someone finds this helpful.

    0 讨论(0)
  • 2020-12-28 09:17

    @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;
    
    }
    
    0 讨论(0)
  • 2020-12-28 09:17

    Actually, in Xcode 6.x is sufficient to flag in ON Auto-enable Return Key

    0 讨论(0)
  • 2020-12-28 09:27

    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;
    }
    
    0 讨论(0)
  • 2020-12-28 09:32

    try and go with:

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    int lenght = editingTextField.text.length - range.length + string.length;
    if (lenght > 0) {
        yourButton.enabled = YES;
    } else { 
        yourButton.enabled = NO;
    }
    return YES;
    

    }

    This answer was marked correct when infact a better solution existed by 'w4nderlust' below. This answer is theirs, let them take the credit!

    0 讨论(0)
  • 2020-12-28 09:33

    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];
        }
    }
    
    0 讨论(0)
提交回复
热议问题