通常、テーブル ビューをリロードしても、最初の応答者は辞任しません。.など、コード内の何かである必要がありますcellForRowAtIndexPath
。
とにかく、失われたフォーカスを復元するには、どの textView が編集されているかを追跡し (1 つしかない場合ははるかに簡単です)、呼び出す前にそれを覚えておき、reloadData
その後カーソルを復元します。
- (void)textViewDidBeginEditing:(UITextView *)textView {
_currentEditingTextView = textView;
}
- (void)textViewDidEndEditing:(UITextView *)textView {
_currentEditingTextView = nil;
}
- (void)yourUpdate {
UITextView *editingTextView = _currentEditingTextView;
[tableView reloadData];
[editingTextView performSelector:@selector(becomeFirstResponder)
withObject:nil
afterDelay:0.1]
}
また、1 つのセルのみを更新する必要がある場合は、reloadRowsAtIndexPaths
メソッドで行います。または、textview のテキストのみを更新する必要がある場合は、それを直接行います。
((YourCellClass *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:yourRow inSection:0]]).textView.text = ...;