我有一個UITableViewController,它顯示了分組tableView中NSManagedObject的屬性。這些屬性的值可以從具有UISteppers和UITextField的自定義UITableViewCell子類進行更改。該表通常有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上。 – 2013-03-25 12:41:00
更新:我設法通過在observeValueForKeyPath:方法的開頭調用[UIView setAnimationsEnabled:NO]來強制它不動畫,然後在最後將其設置回YES。 我仍然不確定爲什麼會發生這種情況只在這個tableView(還有其他類似的對象),但我現在願意移動它,並希望這篇文章將幫助別人解決方法。 – 2013-03-25 15:09:32