У меня есть табличный вид. Когда пользователь нажимает на одну из записей, я проверяю ее свойство и, основываясь на этом, фильтрую результаты и показываю только похожие результаты, поэтому мне нужно обновить tableView.
Проблема в том, что пользователь может прокручивать вверх/вниз tableView. Мне нужно прокрутить tableView, чтобы ячейка была точно такой же UITableViewScrollPosition
, как и до обновления.
Очевидно, я сохраняю последний нажатый элемент
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
_lastSelectedItem = [self itemForIndexPath:indexPath];
}
Затем после перезагрузки tableView:
NSIndexPath *indexPath = [self indexPathForItem:_lastSelectedItem];
if (_tableView.numberOfSections > indexPath.section && [_tableView numberOfRowsInSection:indexPath.section] > indexPath.row) {
[_tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
_lastSelectedItem = nil;
}
Было бы хорошо, но... пользователь не смог закончить на UITableViewScrollPositionMiddle
. Он мог закончить прокрутку на UITableViewScrollPositionTop
или UITableViewScrollPositionBottom
или даже где-то посередине.
-- редактировать --
Вычисление через смещение также проблематично, так как смещение — это разница между началом просмотра и позицией прокрутки верхней таблицы.. хотя меня это значение не интересует :/.