2013-09-01 4 views
5

私は4つのuitextfieldを持っています。完了したら、戻りキーのタイプをGOに変更します。それ以外の場合は、デフォルトのタイプです。問題は、キーボードは、キータイプを変更していないされて、私はドキュメントによるとreloadinputview編集時にuitextfieldが戻り値のキータイプを返す

- (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; 
     } 
    } 
} 

答えて

2

を使用していても、reloadInputViewsは、カスタム入力ビューではなく、標準キーボードに影響を与えます。

私がこの問題を解決するために行ったことは、resignFirstResponderbecomeFirstResponderと呼ぶことです。

の代わりに:これは、任意のアニメーションせずにキーボードを更新します

[textFiled reloadInputViews]; 

行います

[textField resignFirstResponder]; 
[textField becomeFirstResponder]; 
+0

は今、それを試みたが、その効果を持っているように見えませんでした。それは私がios 7を使用しているので、それには何らかの結果がある可能性はありますか? –

+3

ios6&7では動作しません。そして、 'textFieldDidEndEditing:'と 'textFieldDidBeginEditing:'メソッドを呼び出すため、いくつかの副作用があります。 – Martin

+0

[textField resignFirstResponder]; [textField becomeFirstResponder];うまくいきます! –

13

私はreturnKeyTypeを変更した後、次の使用と、iOS7で非常にうまく動作するように見えたし、 iOS6.1:

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

} 
+1

実際には、うまくいきます! – Martin

+1

鮮やかなフリッピング。これは受け入れられた答えでなければなりません。 – Barry

+0

これをもう一度やってもらえませんが、入力画面を再読み込みしようとしました。今はXcode 7.1とios9で作業していますが、私にとってはうまく動作しません。今これを行う方法に関するアイデア? – Esko918

3

これを試してください。

- (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; 
} 
0

私はreturnKeyTypeを変更した後、以下を使用し、iOS7とiOS6.1で非常にうまく動作するように見えた:

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

} 
関連する問題