Changing uitextfield return key type while editing

左心房为你撑大大i 提交于 2019-12-08 22:02:49

问题


I have 4 uitextfields that recognize when they are empty or complete. If complete they change their return key type to GO, else is the default one. The problem is the keyboard is not changing the key type even though i use the reloadinputview

- (void)viewDidLoad
{
    [super viewDidLoad];

    _fieldsArray = @[_nameField, _passwordField, _emailField, _usernameField];
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

    NSRange textFieldRange = NSMakeRange(0, [textField.text length]);

    //NSLog(@"%d", !(NSEqualRanges(range, textFieldRange) && [string length] == 0));

    [self signUpFieldsAreValid:(!(NSEqualRanges(range, textFieldRange) && [string length] == 0) && [self validateSignUpFields:textField])];
    [textField reloadInputViews];
    return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{

    [self signUpFieldsAreValid:NO];
    [textField reloadInputViews];
    return YES;
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    for (UITextField *aTextField in _fieldsArray) {
        if (aTextField.isFirstResponder) {

            aTextField.layer.borderWidth = 0.f;
            aTextField.layer.borderColor = nil;

        }
    }

    textField.layer.borderWidth = 1.f;
    textField.layer.borderColor = [UIColor colorWithRed:200.f/255.f green:0.f/255.f blue:4.f/255.f alpha:1.f].CGColor;

    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSUInteger fieldIndex = [_fieldsArray indexOfObject:textField];

    [_fieldsArray[(fieldIndex + 1) % 4] becomeFirstResponder];

    return YES;
}

- (BOOL)validateSignUpFields:(UITextField *)firstResponder
{
    for (UITextField *aTextField in _fieldsArray) {
        if (!aTextField.text.length && ![aTextField isEqual:firstResponder]) {
            return NO;
        }
    }

    return YES;
}

- (void)signUpFieldsAreValid:(BOOL)valid
{
    NSLog(@"%d", valid);
    for (UITextField *aTextField in _fieldsArray) {

        if (valid) {
            aTextField.returnKeyType = UIReturnKeyGo;
        }
        else {
            aTextField.returnKeyType = UIReturnKeyDefault;
        }
    }
}

回答1:


I used the following after changing the returnKeyType and it seemed to work very well in iOS7 and iOS6.1:

if ([self.textfieldOne isFirstResponder]) {
    [self.textfieldOne reloadInputViews];

}



回答2:


Try this.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
    NSString *newStr=[textField.text stringByReplacingCharactersInRange:range withString:string];
    if([newStr length] > 0)
    {
        textField.returnKeyType = UIReturnKeySearch;
    }
    else
    {
        textField.returnKeyType = UIReturnKeyDefault;
    }
    [textField resignFirstResponder];
    [textField becomeFirstResponder];
    return YES;
}



回答3:


According to the docs, the reloadInputViews only affects custom input views, not the standard keyboard.

What I've done to solve this problem is to call resignFirstResponder then becomeFirstResponder. This will update the keyboard without any animation:

Instead of:

[textFiled reloadInputViews];

do:

[textField resignFirstResponder];
[textField becomeFirstResponder];



回答4:


I used the following after changing the returnKeyType and it seemed to work very well in iOS7 and iOS6.1:

if ([self.textfieldOne isFirstResponder]) {
    [self.textfieldOne reloadInputViews];

}


来源:https://stackoverflow.com/questions/18555461/changing-uitextfield-return-key-type-while-editing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!