1

デリゲートメソッドでUITextFieldの検証を行うtextfieldShouldEndEditingため、編集中のUITextfieldを変更するたびにメソッドが呼び出され、検証が実行されます。

キーボードの戻るボタンは、完了ボタンとして構成されています。押すと入力を処理しますが textfieldShouldEndEditing、最後に編集したUItextFieldが呼び出されることはないため、検証されません。

通常の動作では、ユーザーがフィールドに最後の文字を入力した後に完了ボタンを押すだけなので、これは私には奇妙に思えますが、これはtextFieldShouldEndEditingメソッドをトリガーしません。

これを実行するには、textfieldShouldReturnメソッドで再度検証を強制する必要があります。

ロジックが見つからないので、ポイントが足りないかもしれません。

4

1 に答える 1

6

私は問題を見つけました。

でResignFirstResponderを再署名する必要があります。textfieldShouldReturnその後、textfieldShouldEndEditingが呼び出されます。

これが私の方法です。2つのUITextFieldがあります。self.usernameは、それらの1つへのIBOutletであり、戻るボタンがNEXTとして構成されています。self.password戻りボタンが完了したUITextFieldを指す他のIBOutletです。

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    if (textField == self.userName) {
        return [self validateUserName:textField.text];

    }



    if (textField == self.password) {
        return [self validatePassword:textField.text];

    }

    //No hay errores de validación
    return YES;    
}


-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //In userName return is Next
    //In password return is Done

    if (textField == self.userName) {
        [self.password becomeFirstResponder];
    } 
    [textField resignFirstResponder];
    return YES;    
}
于 2012-04-16T07:31:18.970 に答える