3

各セル内に UITextField を持つ UITableView があります。現在編集中のセルのインデックスを格納するモデル オブジェクト。セルが画面外にスクロールすると、私のアプリはファーストレスポンダー ステータスを無効にします。(そうしないと、問題が発生する可能性があります)。ここで、そのインデックスに対応するセル (おそらく同じセル、または別のセル) が画面にスクロールバックしようとしているとします。そのセルの textField を firstResponder にしたいです。私の代理人は電話を受けます

tableView: willDisplayCell: forRowAtIndexPath:

新しいセルに対応します。ただし、セルが表示されるまで firstResponder ステータスを受け入れないため、その時点で becomeFirstResponder: を呼び出しても役に立ちません。

タイマーを使用する以外に、becomeFirstResponder: セルが実際にファーストレスポンダーになることができる時点で呼び出す方法についてのアイデアはありますか?

編集: cellForRowAtIndexPath: は常に willDisplayCell: の前に呼び出されます。だからそこに助けはありません。

4

3 に答える 3

1

私はこれを試していませんが、最初に試すのは cellForRowAtIndexPath です...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // standard stuff to build cell and setup it's state

    if ([indexPath isEqual:self.myModel.indexPathOfTextFieldBeingEdited]) {
        // you probably have a handle to the text field from the setup above
        UITextField *textField = (UITextField *)[cell viewWithTag:SOME_TAG];
        [textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
    }
    return cell;
}
于 2013-03-03T19:04:45.310 に答える
0

これが私がMonoTouchで行ったことです-ScrollToRow()をアニメーション化しないことが重要です-つまり、edzio27による回答に示されているように「animated:NO」です(edzio27に感謝します:))。

var newCell = (UIOrderLineCell)tableView.CellAt(newIndexPath);
if (newCell == null)
{
    tableView.ScrollToRow(newIndexPath, UITableViewScrollPosition.Middle, false);
    newCell = (UIOrderLineCell)tableView.CellAt(newIndexPath);
}
于 2013-04-20T20:55:16.543 に答える
0

最初のレスポンダーとして作成するには、画面にセルを表示する必要があります。最初に行うこと:

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

そして、そのラベル/テキストフィールドでファーストレスポンダーを呼び出します。

于 2013-03-03T19:24:15.880 に答える