Это действительно сводит меня с ума.
У меня есть табличное представление, которое отображает отсортированный список клиентов. Пользователи могут добавить нового клиента, поэтому мне нужно добавить новую строку в табличное представление (путем обновления модели данных и вызова insertRowsAtIndexPaths:withRowAnimation:
). Однако, так как табличное представление отсортировано, эта вставка может происходить вне экрана, что не очень приятно. Пользовательский опыт. Поэтому моя идея состояла в том, чтобы прокрутить табличное представление до пути индекса, где будет происходить вставка, прежде чем вставлять строку:
- (void)finishedSavingNewCustomer:(Customer*)customer atIndex:(NSInteger)index {
// NOTE: self.customers (which is the model for the table view used in all datasource
// methods) has already been updated at this point, ie. it already contains the new customer
// scroll the table view so that the insert position is on-screen
NSInteger scrollRow = (index < ([self.customers count] - 1) ? index : [self.customers count] - 2);
NSIndexPath* scrollIndexPath = [NSIndexPath indexPathForRow:scrollRow inSection:0];
[self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
// insert the new row
NSArray* indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
}
Этот код на самом деле работает должным образом: табличное представление прокручивается, и новая строка вставляется правильно.
Однако после вставки некоторые ячейки табличного представления становятся «не отвечающими» , т.е. они не будут отображать кнопку удаления при пролистывании и даже не будут выделены при выборе. Поскольку это действительно странно и довольно сложно объяснить, позвольте мне попытаться проиллюстрировать это.
Исходная ситуация: отображаются строки 1 - 5:
--------- screen top --------
Row 1
Row 2
Row 3
Row 4
Row 5
------- screen bottom -------
Row 6
Row 7
Row 8
Row 9
Ситуация после прокрутки и вставки:
Row 1
Row 2
Row 3
Row 4
Row 5
--------- screen top --------
Row 6
Row 7
Row 7a << newly inserted
Row 8
Row 9
------- screen bottom -------
Теперь после вставки строки 1 - 5 не будут реагировать на взаимодействие с пользователем, как описано выше.
Кто-нибудь когда-нибудь сталкивался с такой проблемой? Идеи? Существуют ли другие способы убедиться, что вставка новых строк видима для пользователя?
Обновление: Только что протестировано на устройстве, и получается, что эта проблема возникает только на симуляторе! Это делает проблему менее неприятной, но мне все равно было бы интересно, если бы кто-то еще испытывал такое поведение.