1

セルのコンテンツ ビューに 3 つの UITextFields が追加されたテーブルがあります (セクションごとに 1 行)。特定のフィールドをスクロールしてキーボードの上に表示できるように、挿入する 4 番目のセクションがあります。

私が抱えている問題 (iPad のみ) は、テキスト フィールドの 1 つに firstResponder がある場合、ユーザーが別のフィールドをタップしてもそれが放棄されないことです。iPad のレスポンダー チェーンに違いはありますか? ビュー コントローラ UITextFieldDelegate の次のコードでは、別のフィールドに触れたときに textFieldShouldEndEditing が呼び出されません。完了ボタンを押すと、期待どおりに機能します (別のフィールドがタッチされていない限り)。

以下のコードに何か問題がありますか?

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (!_editing++) {
        [self.tableView insertSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
    }

    // scroll to section number in the text fields tag
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:textField.tag] atScrollPosition:UITableViewScrollPositionTop animated:YES];

    return YES;
}

- (void) textFieldDidBeginEditing:(UITextField *)textField {
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)] autorelease]; 
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    if (_editing-- == 1) {
        // 
        [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
    }

    self.navigationItem.rightBarButtonItem = nil;

    // do something with the text here...

    return YES;
}
4

1 に答える 1

0

OK、満足のいく回避策を見つけました。セクションを削除してアニメーション化する要求が問題を解決する前に、実行ループを実行できるようです。これはリンゴのバグだと思いますか?この問題を心配している他の人のために-私はiPadでiOS3.2.1を実行していました。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    if (_editing == 1) {
        [self performSelector:@selector(hideFinalSection) withObject:nil afterDelay:0.0f];
    }
    else {
        _editing--;
    }

    self.navigationItem.rightBarButtonItem = nil;

        // do something with the text here...

    return YES;
}

- (void) hideFinalSection {
    if (!(--_editing)) { 
        [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:4] withRowAnimation:UITableViewRowAnimationNone];
    }
}
于 2010-10-22T14:07:00.740 に答える