標籤:tableviewcell 動畫 高度
我們經常會碰到一些需要動畫的地方,比如在TOP的發帖頁面中,當我們選中一個文本編輯的cell時,cell的高度會動態改變。
我們要的效果大概就是如下效果:
當我們選擇一個cell的時候,我們就要改變它的高度,並且以動畫的形式。
我們該如何?這個效果呢?我們主要需要使用以下這兩個方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
兩個方法分別控制cell的高度和cell被選中之後會發生的事情。
我們在第一個方法中,需要實現一些我們想要的高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {if(該indexPath被選中) {return 60 * 2.0;}return 60;}
而在第二個方法中,我們控制當cell被點擊後我們所有希望發生的事情,並且我們今天想要探究的“大明星代碼”也在其中~~
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {[tableView deselectRowAtIndexPath:indexPath animated:TRUE];//擷取當前indexPath並判斷對應的Cell是否被選中 //最神奇的地方!![tableView beginUpdates];[tableView endUpdates];} 那麼為什麼在這裡會發生神奇的事情呢?
讓我們來重點關注這行代碼:[tableViewbeginUpdates];
文檔中對這行代碼的解釋為讓TableView產生插入,刪除或重新載入cell
看到這裡大家應該就恍然大悟了吧?原來當我們點擊了一個cell後我們相當於重新載入了一遍我們的tableview,但是卻和[tableView reloadata]是完全不一樣的風格,reloadData這個方法會讓tableView整體重新載入,相當於是作用在tableView上,而beginUpdates只是作用在cell上!
好了,大家應該已經可以看到效果了,如果還是希望可以讀到我們全部的代碼,可以通過以下連結擷取~~
http://www.locassa.com/wp-content/uploads/2011/05/AnimatedTableViewCell.zip
[iOS]在tableview中用動畫效果改變cell的高度