欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS如何讓tableview支持不同種類(lèi)的cell詳解

 更新時(shí)間:2017年08月10日 10:07:28   作者:Nemocdz  
這篇文章主要給大家介紹了關(guān)于iOS如何讓tableview支持不同種類(lèi)的cell的相關(guān)資料,文中通過(guò)示例代碼詳細(xì)的給大家介紹了實(shí)現(xiàn)的兩種方法,對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

我們?cè)陧?xiàng)目中偶爾需要讓tableview里支持不同種類(lèi)的cell,比如微博的原創(chuàng)微博和別人轉(zhuǎn)發(fā)的微博,就是兩種cell。又或是類(lèi)似支付寶的的timeline也有各種類(lèi)型的cell。在同一個(gè)tableview里實(shí)現(xiàn)不同種類(lèi)的cell,一般有兩種方法,一種是把所有種類(lèi)的cell先注冊(cè)了,再根據(jù)不同的identifer去加載cell,一種是在init時(shí)創(chuàng)建不同的identifer的cell。

效果圖如下:


準(zhǔn)備工作

創(chuàng)建一個(gè)基類(lèi)的CDZBaseCell,基類(lèi)cell擁有一些共用的屬性和方法,如持有model,解析model。

創(chuàng)建不同的子類(lèi)cell,以?xún)蓚€(gè)子類(lèi)CDZTypeACell CDZTypeBCell 為例,繼承自CDZBaseCell,重寫(xiě)一些方法,如高度,顯示視圖等等。

Datasource中準(zhǔn)備好判斷index所在的cell種類(lèi)的方法(如根據(jù)model的type屬性等)

- (Class)cellClassAtIndexPath:(NSIndexPath *)indexPath{
 CDZTableviewItem *item = [self itemAtIndexPath:indexPath];
 switch (item.type) {
  case typeA:{
   return [CDZTypeACell class];
  }
   break;
  case typeB:{
   return [CDZTypeBCell class];
  }
   break;
 }
}

- (CDZTableviewItem *)itemAtIndexPath:(NSIndexPath *)indexPath{
 return self.itemsArray[indexPath.row];
}

- (NSString *)cellIdentiferAtIndexPath:(NSIndexPath *)indexPath{
 return NSStringFromClass([self cellClassAtIndexPath:indexPath]);
}

方法一:先注冊(cè),根據(jù)identifer去加載不同的cell

先在tableview創(chuàng)建時(shí)注冊(cè)需要的不同種類(lèi),再判斷index對(duì)應(yīng)的種類(lèi),再根據(jù)identifer加載子類(lèi)cell。

[self.tableview registerClass:[CDZTypeACell class] forCellReuseIdentifier:NSStringFromClass([CDZTypeBCell class])];
[self.tableView registerClass:[CDZTypeBCell class] forCellReuseIdentifier:NSStringFromClass([CDZTypeBCell class])];

并在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中根據(jù)重用標(biāo)識(shí)加載cell。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 CDZBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdentiferAtIndexPath:indexPath] forIndexPath:indexPath];
 cell.item = [self itemAtIndexPath:indexPath];
 return cell;
}

方法二:在init時(shí)創(chuàng)建不同identifer的cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中判斷cell是否為nil,并根據(jù)index所在cell的種類(lèi)初始化cell和其identifer。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 CDZBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdentiferAtIndexPath:indexPath]];
 if (!cell) {
  Class cls = [self cellClassAtIndexPath:indexPath];
  cell = [[cls alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[self cellIdentiferAtIndexPath:indexPath]];
 }
 cell.item = [self itemAtIndexPath:indexPath];
 return cell;
}

源碼下載

所有源碼和Demo本地下載

總結(jié)

個(gè)人更喜歡第二種,蘋(píng)果官方文檔也推薦第二種方法去重用cell。我覺(jué)得優(yōu)點(diǎn)是一個(gè)是在tableview劃分MVC架構(gòu)時(shí),tableview創(chuàng)建時(shí)不需要知道cell的類(lèi)型,而只需要知道datasouce,而datasource才是需要去分配cell類(lèi)型的。第二個(gè)是tableviewcell的初始化方法并非只能用initWithStyle(collectionview必須先注冊(cè)的原因則在于初始化方法只有initWithFrame)。而使用了注冊(cè),則是在復(fù)用池空時(shí)默認(rèn)調(diào)用initWithStyle的方法,如果需要用別的方法初始化就不可以了。第一種方法可以用在有一些庫(kù)需要先注冊(cè)后才能調(diào)用的,比如自動(dòng)計(jì)算cell高度的庫(kù)FDTemplateLayoutCell。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • iOS實(shí)現(xiàn)輪播圖banner示例

    iOS實(shí)現(xiàn)輪播圖banner示例

    本篇文章主要介紹了iOS實(shí)現(xiàn)輪播圖banner示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • iOS 約束沖突怎么解決

    iOS 約束沖突怎么解決

    這篇文章主要介紹了iOS 約束沖突的解決方案,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • iOS 設(shè)置狀態(tài)欄的背景顏色方法

    iOS 設(shè)置狀態(tài)欄的背景顏色方法

    下面小編就為大家?guī)?lái)一篇iOS 設(shè)置狀態(tài)欄的背景顏色方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • iOS開(kāi)發(fā)實(shí)現(xiàn)抽屜效果

    iOS開(kāi)發(fā)實(shí)現(xiàn)抽屜效果

    這篇文章主要為大家詳細(xì)介紹了iOS開(kāi)發(fā)實(shí)現(xiàn)抽屜效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 一道值得深入思考的iOS面試題詳解

    一道值得深入思考的iOS面試題詳解

    這篇文章主要給大家分享介紹了關(guān)于一道值得深入思考的iOS面試題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例

    iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例

    這篇文章主要介紹了iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例,幫助大家更好的進(jìn)行ios開(kāi)發(fā),感興趣的朋友可以了解下
    2020-10-10
  • IOS中html5上傳圖片方向問(wèn)題解決方法

    IOS中html5上傳圖片方向問(wèn)題解決方法

    這篇文章主要介紹了IOS中html5上傳圖片方向問(wèn)題解決方法的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • iOS如何裁剪圓形頭像

    iOS如何裁剪圓形頭像

    這篇文章主要介紹了iOS如何裁剪圓形頭像的方法,如何為圓形頭像加邊框,如何進(jìn)行截圖操作,感興趣的小伙伴們可以參考一下
    2016-04-04
  • IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    這篇文章主要介紹了IOS 中UITextField和UITextView中字符串為空和空格的解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • iOS使用音頻處理框架The Amazing Audio Engine實(shí)現(xiàn)音頻錄制播放

    iOS使用音頻處理框架The Amazing Audio Engine實(shí)現(xiàn)音頻錄制播放

    這篇文章主要為大家詳細(xì)介紹了iOS使用音頻處理框架The Amazing Audio Engine實(shí)現(xiàn)音頻錄制播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評(píng)論