Я понимаю, что этот вопрос довольно старый (2011 г.), но просто для того, чтобы опубликовать актуальный ответ на тот случай, если кто-то (например, я) ищет эту проблему и наткнется на этот вопрос:
С iOS 9 Apple значительно улучшила UITableView
.Чтобы убедиться, что фокус не будет потерян при перезагрузке таблицы, просто сделайте это:
tableView.remembersLastFocusedIndexPath = Yes;
, и он будет «магически работать».
Еще лучше, внедрите
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView
в UITableViewDelegate
, чтобы таблица знала, какую строку вы хотите выбрать, когда она отображается в первый раз.
До iOS 9 я обычно просто писал свой собственный метод reloadData
, который получает выбранную в данный момент строку, перезагружает таблицу и затем выбирает ее снова.Либо в UITableViewController
, либо, если мне нужно это для работы с таблицей, где я не могу предотвратить прямой вызов кода reloadData
, я вложил в класс UITableView и переопределил reloadData
(эй, делегирование - предпочтительный способ, но иногдаприходится создавать подклассы и переопределять даже в iOS).