2013-03-25 33 views
0

我有一個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]來解決這個問題,但我寧願不這樣做,爲了時間和瑣事。任何人有任何想法如何防止這種行爲?

+0

最奇怪的部分(但也許是線索)是,這個問題似乎並不存在於iPhone上。只在iPad上。 – 2013-03-25 12:41:00

+0

更新:我設法通過在observeValueForKeyPath:方法的開頭調用[UIView setAnimationsEnabled:NO]來強制它不動畫,然後在最後將其設置回YES。 我仍然不確定爲什麼會發生這種情況只在這個tableView(還有其他類似的對象),但我現在願意移動它,並希望這篇文章將幫助別人解決方法。 – 2013-03-25 15:09:32

回答

0

當涉及很多部分時,這會變得複雜。我想你試圖複製免費的Sensible TableView框架已經做的事情。該框架將根據您的託管對象的數據自動生成所有部分,並根據您自己的規則確定哪些部分可見。值得檢查,因爲它可以爲您節省大量時間,試圖重塑這一切。

+0

謝謝馬特。令人沮喪的是,這只是一個非常特殊的情況導致了這種行爲。剩下的時間,它的工作原理與我想要的完全一樣。我無法在課堂中的任何地方找到任何動畫。在這一點上,我不認爲重新開始一個框架會節省我的時間,但是,因爲我已經完全用我自己的子類工作了99%。 – 2013-03-26 03:12:11

相關問題