淺談UITableView內Cell的選中細節過程

RecherJ發表於2017-12-29

UITableView的代理協議中給代理者提供了四個代理方法,用來監聽從選中一個cell到選中另一個cell的切換過程,當然代理必須實現這些方法,才能監聽整個cell的點選切換過程。

複製程式碼
  • (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath //將要選中
  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath // 選中
  • (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath // 將要取消選中
  • (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath // 取消選中

######1.當第一次點選某個cell時
* 1.1 首先呼叫代理的`- willSelectRowAtIndexPath:(NSIndexPath *)indexPath`方法,並將選中的indexPath物件返回給代理,其中包含選中的這組section組號和row行號
* 1.2 緊接著,馬上會調`- didSelectRowAtIndexPath:(NSIndexPath *)indexPath`方法,告訴代理選中了該cell

######2.再點選另一個Cell時
* 2.1 首先調`- willSelectRowAtIndexPath:(NSIndexPath *)indexPath`方法,告訴代理有一個新Cell將要被選中,並將這個新cell的indexPath返回給代理
* 2.2 然後調` willDeselectRowAtIndexPath:(NSIndexPath *)indexPath`方法,告訴代理即將取消選中上一個cell
* 2.3 接著調`didDeselectRowAtIndexPath:(NSIndexPath *)indexPath`取消選中上一個cell
* 2.4 最後調`didSelectRowAtIndexPath:(NSIndexPath *)indexPath`選中新cell

明白了這些cell選中的細節過程,我們就可以讓控制器成為TableView的代理,監聽其內部的點選事件,完成一些轉場動畫、彈框提示、modal新控制器或者修改cell內資料時,傳遞資料給下一個控制器等等一些詳細操作了。
例如,可以不用push新控制器修改資料的方式,直接將修改後的資料在原來的view中重新整理,將重新整理表格的程式碼寫在`willDeselectRowAtIndexPath:(NSIndexPath *)indexPath`中,這樣修改後點選新cell,新資料自動重新整理,不用上下拉滾動cell來重新整理;
再例如,當點選某個cell,介面顯示一些友好的文字提示,之後慢慢消失。整個view的顯示、透明度變化、消失、view的最終刪除等一系列動畫過程的相關程式碼,就可以放在`didSelectRowAtIndexPath:(NSIndexPath *)indexPath`方法中完成
等等
……

總之,在明白了這個cell點選函式呼叫的先後順序後,我們就可以做很多事情了。

複製程式碼

相關文章