動態改變cell的高度&beginUpdates和endUpdates-實現UITableView的動畫塊


1.利用reloadRowsAtIndexPaths:withRowAnimation:來動態改變cell的高度

UITableView的- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

這一方法會重新加載所指定indexPaths中的UITableViewCell實例,因為重新加載cell所以會請求這個UITableView實例的data source來獲取新的cell;這個表會用動畫效果讓新的cell進入,並讓舊的cell退出。

會調用UITableViewDataSource協議中的所有方法來更新數據源,其中調用 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

只會調用所需更新的行數,來獲取新的cell,

注意:此時該cell的- (void)setSelected:(BOOL)selected animated:(BOOL)animated將被調用,所設置的selected為NO;

 
2.我們在做UITableView的修改,刪除,選擇時,需要對UITableView進行一系列的動作操作。
這樣,我們就會用到

 [tableView beginUpdates];

        if (newCount<=0) {

            [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]withRowAnimation:UITableViewRowAnimationLeft];

        }

        

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationLeft];

        [tableView endUpdates];

 
向上面一段代碼,就是動態刪除UITableView 的UITableViewCell的操作。
因為,如果我們的UITableView是分組的時候,我們如果刪除某個分組的最后一條記錄時,相應的分組也將被刪除。所以,必須保證UITableView的分組,和cell同時被刪除。
所以,就需要使用beginUpdates方法和endUpdates方法,將要做的刪除操作“包”起來!
 
beginUpdates方法和endUpdates方法是什么呢?
 

 

這兩個方法,是配合起來使用的,標記了一個tableView的動畫塊。

分別代表動畫的開始開始和結束。

兩者成對出現,可以嵌套使用。

一般,在添加,刪除,選擇 tableView中使用,並實現動畫效果。

在動畫塊內,不建議使用reloadData方法,如果使用,會影響動畫。

 

 

一般什么時候使用這么一個動畫塊呢?
 
一般在UITableView執行:刪除行,插入行,刪除分組,插入分組時,使用!用來協調UITableView的動畫效果。
 

插入指定的行,

在執行該方法時,會對數據源進行訪問(分組數據和行數據),並更新可見行。所以,在調用該方法前,應該先更新數據源

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

 

插入分組到制定位置

- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

插入一個特定的分組。如果,指定的位置上已經存在了分組,那么原來的分組向后移動一個位置。

 

刪除制定位置的分組

- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

刪除一個制定位置的分組,其后面的分組向前移動一個位置。

 

移動分組

- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection

移動原來的分組從一個位置移動到一個新的位置。如果,新位置上若存在某個分組,那這某個分組將會向上(下)移動到臨近一個位置。該方法,沒有動畫參數。會直接移動。並且一次只能移動一個分組。

 
在如上方法中,建議使用該動畫塊進行操作!
 
希望對你有所幫助!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM