0

グループ化されたUITableViewに3つのUITextFieldがあり、どのUITextFieldも空でない場合にのみ、「保存」UIBarButtonItemを有効にする正しいロジックを見つけようとしています。

現在、- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)stringUITextFieldデリゲートメソッドを使用して、フィールドへの変更を1文字ずつ検出していますが、一貫性のない結果が得られています。

何か案は?

編集:これが私が現在使用しているコードです。ご覧のとおり、テキストフィールドを配列に配置して、繰り返し処理できるようにしました。現在のように、3番目のフィールドに2番目の文字を入力するまで、保存ボタンは有効になりません。また、フィールドから文字を1つずつ削除することで、有効と無効を交互に切り替えます。

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    BOOL allValid;

    if (newString.length)
    {
        // Cycle through array checking for completeness
        for (int i = 0; i < [textFieldArray count]; i++)
        {
            if ([[[textFieldArray objectAtIndex:i] text] length] > 0)
            {
                allValid = YES;
                NSLog(@"TextField #%i Validates.", i);
            }
            else
            {
                allValid = NO;
                NSLog(@"TextField #%i Does Not Validate.", i);
            }
        }
    }
    else
    {
        NSLog(@"Invalid");
        allValid = NO;
    }

    if (allValid)
        [saveButton setEnabled:YES];
    else
        [saveButton setEnabled:NO];

    return YES;
4

2 に答える 2

0

さて、これが私が最終的にやった方法です。

これを作成- (IBAction)validateFields:(id)senderし、UITextField の Editing Changed アウトレットに接続しました。このように見えます。

- (IBAction)validateFields:(id)sender
{
    BOOL valid = YES;

    // On every press we're going to run through all the fields and get their length values. If any of them equal nil we will set our bool to NO.
    for (int i = 0; i < [textFieldArray count]; i++)
    {
        if (![[[textFieldArray objectAtIndex:i] text] length])
            valid = NO;
    }

    [saveButton setEnabled:valid];
}

私はそれをかなりまともなものにしましたが、空のテキストフィールドの任意の組み合わせで保存ボタンを有効にすることができなかったので、これが進むべき道だと言います.

于 2010-04-15T01:12:46.020 に答える
0

メソッドをどのように正確に使用していますか?これが私がそれを行う方法です:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
  if (newString.length) {
    //If all the others are also non-empty, enable your button
  }
  return YES;
}

ただし、ユーザーが Enter キーを押した後にボタンを有効にする方が理にかなっている場合があり、これは対処が簡単です。テキスト フィールドで didEndEditingOnExit または didEndEditing イベントを使用し、空でないかどうかをチェックします。

于 2010-04-14T22:19:20.387 に答える