咱們常常會碰到一些須要動畫的地方,好比在TOP的發帖頁面中,當咱們選中一個文本編輯的cell時,cell的高度會動態的改變。動畫
咱們要的效果大概就是以下效果:spa
當咱們選擇一個cell的時候,咱們就要改變它的高度,而且以動畫的形式。code
咱們該如何實現這個效果呢?咱們主要須要使用如下這兩個方法:orm
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
兩個方法分別控制cell的高度和cell被選中以後會發生的事情。文檔
咱們在第一個方法中,須要實現一些咱們想要的高度:it
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if(該indexPath被選中) { return 60 * 2.0; } return 60; }
而在第二個方法中,咱們控制當cell被點擊後咱們全部但願發生的事情,而且咱們今天想要探究的「大明星代碼」也在其中~~table
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:TRUE]; //獲取當前indexPath並判斷對應的Cell是否被選中 //最神奇的地方!! [tableView beginUpdates]; [tableView endUpdates]; }
那麼爲何在這裏會發生神奇的事情呢?class
讓咱們來重點關注這行代碼:[tableView beginUpdates];date
文檔中對這行代碼的解釋爲讓TableView產生插入,刪除或從新加載cellselect
看到這裏你們應該就恍然大悟了吧?原來當咱們點擊了一個cell後咱們至關於從新加載了一遍咱們的tableview,可是卻和[tableView reloadata]是徹底不同的風格,reloadData這個方法會讓tableView總體從新加載,至關因而做用在tableView上,而beginUpdates只是做用在cell上!