我有一个 UITableViewController,它在分组的 tableView 中显示 NSManagedObject 的属性。可以从具有 UISteppers 和 UITextFields 的自定义 UITableViewCell 子类更改这些属性的值。该表通常有 9 个部分,但是当 NSManagedObject 的某些属性为 nil 时,我通过将 numberOfRowsInSection 设置为 0 以及将 heightForHeaderInSection 和 heightForFooterInSection 设置为 1 来隐藏这些部分。这些部分是隐藏的。
自定义单元格调用更改 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];
}
}
这不是具有所有属性的完整方法,但您明白了。
问题:当我隐藏了 PROPERTIES 上方的部分并更改了 positionX 的值时,第 0 行的单元格(正确的 positionX 单元格)不会重新加载 UITableViewRowAnimationNone,而是使用 UITableViewRowAnimationFade 重新加载。它会动,我不希望它动。我的子类直接来自 UITableViewController,并且类中没有其他方法可以重新加载除 -RowAnimationNone 之外的任何行或节。当我尝试在没有动画的情况下重新加载整个部分时,整个部分都会动画。该部分中的其他行都没有这样的行为;他们重新加载正确,没有动画。当第 0 行上方的部分未隐藏时,第 0 行会重新加载且没有动画。
我可以通过调用 [self.tableview reloadData] 来解决这个问题,但为了时间和 hackiness,我不想那样做。任何人都知道如何防止这种行为?