1

UITextField一連のsに「前へ」、「次へ」、「完了」ボタンを実装しようとしています。これらのボタンはそれぞれUITableViewCell、グループ化されたのに含まれていUITableViewます。を保持し、現在アクティブなを指す整数を保持UITextFieldsします。[前へ]ボタンと[次へ]ボタンをそれぞれタップすると起動する2つのセレクターを次に示します。NSMutableArrayUITextField

-(IBAction)didSelectPreviousButton:(id)sender
{    
    if ((textFieldIndex - 1) >= 0) {
        UITextField *currentField = [self.testTextFields objectAtIndex:(textFieldIndex)];
        UITextField *nextTextField = [self.testTextFields objectAtIndex:(--textFieldIndex)];
        BOOL result = [nextTextField becomeFirstResponder];
        NSLog([NSString stringWithFormat:@"currentField's window: %@", currentField.window]);
        NSLog([NSString stringWithFormat:@"nextTextField's window: %@", nextTextField.window]);
    } else {
        [self dismissKeyboard:sender];
    }
}

-(IBAction)didSelectNextButton:(id)sender
{
    if ((textFieldIndex + 1) < [self.inspectionItemSpec.numberOfTests intValue]) {
        UITextField *currentField = [self.testTextFields objectAtIndex:(textFieldIndex)];
        UITextField *nextTextField = [self.testTextFields objectAtIndex:(++textFieldIndex)];
        BOOL result = [nextTextField becomeFirstResponder];
        NSLog([NSString stringWithFormat:@"currentField's window: %@", currentField.window]);
        NSLog([NSString stringWithFormat:@"nextTextField's window: %@", nextTextField.window]);
    } else {
        [self dismissKeyboard:sender];
    }
}

ご覧のとおり、現在および次のテキストフィールドのウィンドウプロパティをログに記録していdidSelectNextButtonます。で、すべてが正しいです。ただし、ではdidSelectPreviousButtonnextTextField.windowは常にnilです。なぜこれが起こっているのでしょうか?

(前のボタンは、ユーザーが次のボタンを1回タップした後にのみ有効になることに注意してください。)

4

2 に答える 2

1

これは、それぞれUITextFieldUITableViewCellしばらくの間、で参照されていることが原因である可能性がありますself.testTextFields。iOSのテーブルでセルが再利用される方法が原因で、配列内の次のテキストフィールドがテーブル内の次の表示行のテキストフィールドではない状況になる可能性があります(おそらくそうなるでしょう)。

tableView:cellForRowAtIndexPath:コードを投稿すると、問題が明らかになる可能性があります。

于 2012-06-06T23:59:53.107 に答える
0

ウィンドウはビュー階層のルートです。windowプロパティがnilの場合、ビューは次のような方法でビュー階層に追加されていません。

    [someViewInTheViewHierarchy addSubview:yourView].
于 2012-06-06T23:47:26.140 に答える