У меня есть UITableViewController, который отображает свойства NSManagedObject в сгруппированном tableView. Значения этих свойств могут быть изменены из пользовательских подклассов UITableViewCell с UISteppers и UITextFields. В таблице обычно есть 9 разделов, но когда некоторые из свойств NSManagedObject равны нулю, я скрыть эти разделы, установив для параметра numberOfRowsInSection значение 0, а также heightForHeaderInSection и heightForFooterInSection на 1. Это работает нормально; разделы скрыты.UITableView перезагружает строку с нежелательным исчезновением, когда предыдущий раздел скрыт
Пользовательские ячейки вызывают метод делегата, который изменяет значения свойств NSManagedObject, а UITableViewController настроен на KVO, отслеживает свойства объекта NSManagedObject и перезагружает отдельные строки при изменении соответствующих свойств. Вот начало метода:
#define POSITION 3
#define TARGETED_BY 5
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"positionX"]) {
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:POSITION]]
withRowAnimation:UITableViewRowAnimationNone];
} else if ([keyPath isEqualToString:@"positionY"]) {
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:POSITION]]
withRowAnimation:UITableViewRowAnimationNone];
} else if ([keyPath isEqualToString:@"isTargetedBy"]) {
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:TARGETED_BY]
withRowAnimation:UITableViewRowAnimationNone];
}
}
Это не полный метод со всеми свойствами, но вы получаете идею.
ПРОБЛЕМА: когда я спрятал раздел выше свойств, и изменить значение, то Позиция X ячейку в строке 0 (правильные клетки Позиции X) перезагружает не с UITableViewRowAnimationNone, но с тем, что, как представляется, UITableViewRowAnimationFade , Он движется, и я не хочу этого. Мой подкласс находится непосредственно из UITableViewController, и в этом классе нет другого метода, который перезагружает любые строки или разделы каким-либо другим, кроме -RowAnimationNone. И когда я пытаюсь перезагрузить весь раздел без анимации, весь раздел анимации. Ни одна из других строк в разделе не ведет себя так: они перезагружаются правильно, без анимации. И строка 0 перезагружается без анимации, когда раздел над ней не скрыт.
Я могу обойти это, позвонив [self.tableview reloadData], но я бы предпочел не делать этого таким образом, ради времени и взлома. Кто-нибудь знает, как предотвратить это поведение?
Нечетная часть (но, возможно, подсказка) заключается в том, что эта проблема не существует на iPhone. Только на iPad. –
Обновление: мне удалось заставить его не анимировать, вызвав [UIView setAnimationsEnabled: NO] в начале метода observValueForKeyPath: затем вернув его в YES в конце. Я до сих пор не знаю, почему это происходит только на этом столе. Есть только похожие объекты, но я готов перейти к нему пока, и, надеюсь, это сообщение поможет кому-то еще с обходным решением. –