0

basicUITableViewを含む basic がありますUITableViewCell。テーブルに新しいセルを追加するときは、次のことを行います。

1) 新しい行までスクロールする

2) 新しい UITableViewCell 内のすべてのテキストを選択して、キーボードが表示され、ユーザーがセルのテキストをすぐに編集できるようにします。

次回のイベント ループ (テーブル ビューで -reloadData を呼び出した後) では、次のようにします。

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:wordIndex inSection:0];

[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:(UITableViewScrollPositionNone)];

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];  
[cell.textLabel becomeFirstResponder];
cell.highlighted = YES;

スクロールは正しいのですが、セル内のテキストが選択されていません。

4

2 に答える 2

2

AはからUILabel戻るため、ファーストレスポンダーになれません。ラベルが編集されているように見せるには、 を と一緒に使用してみてください。 NOcanBecomeFirstResponderUITextFieldborderStyleUITextBorderStyleNone

becomeFirstResponderコントロールがウィンドウのサブビューでない場合、コントロールはファーストレスポンダーになれないため、呼び出しのタイミングに注意してください。これは、画面から非常に離れた行にスクロールし、becomeFirstResponder表示される行として追加される前にすぐに呼び出しを試みた場合に発生する可能性があります。

于 2013-04-11T12:37:49.760 に答える
1

前の回答と同様に、UITableViewCell のカスタム子を作成し、その上に UITextField を追加できます。

@interface MyTableViewCell : UITableViewCell
@property(nonatomic, retain) IBOutlet UITextField *editableTextField;
@end

コントローラーで didSelectRowAtIndexPath をキャッチし、そのテキストフィールドを最初の応答者になるように設定するよりも

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
MyTableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
[cell.editableTextField becomeFirstResponder];
}

UPD: Not-in-window-cell のトラブルの解決策として、上の回答で説明されているように、メソッドで selectCellAtIndexPath を呼び出す必要があります

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
于 2013-04-11T13:33:34.690 に答える