最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS如何讓tableview支持不同種類的cell詳解

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

前言

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

效果圖如下:


準(zhǔn)備工作

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

創(chuàng)建不同的子類cell,以兩個(gè)子類CDZTypeACell CDZTypeBCell 為例,繼承自CDZBaseCell,重寫一些方法,如高度,顯示視圖等等。

Datasource中準(zhǔn)備好判斷index所在的cell種類的方法(如根據(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]);
}

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

先在tableview創(chuàng)建時(shí)注冊需要的不同種類,再判斷index對應(yīng)的種類,再根據(jù)identifer加載子類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)識加載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的種類初始化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è)人更喜歡第二種,蘋果官方文檔也推薦第二種方法去重用cell。我覺得優(yōu)點(diǎn)是一個(gè)是在tableview劃分MVC架構(gòu)時(shí),tableview創(chuàng)建時(shí)不需要知道cell的類型,而只需要知道datasouce,而datasource才是需要去分配cell類型的。第二個(gè)是tableviewcell的初始化方法并非只能用initWithStyle(collectionview必須先注冊的原因則在于初始化方法只有initWithFrame)。而使用了注冊,則是在復(fù)用池空時(shí)默認(rèn)調(diào)用initWithStyle的方法,如果需要用別的方法初始化就不可以了。第一種方法可以用在有一些庫需要先注冊后才能調(diào)用的,比如自動計(jì)算cell高度的庫FDTemplateLayoutCell。

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

相關(guān)文章

  • iOS中UIImagePickerController圖片選取器的用法小結(jié)

    iOS中UIImagePickerController圖片選取器的用法小結(jié)

    UIImagePickerController平時(shí)就是用來做應(yīng)用中從相冊中選取圖片功能的,這里我們就來整理一下iOS中UIImagePickerController圖片選取器的用法小結(jié),需要的朋友可以參考下
    2016-05-05
  • iOS自定義UICollectionViewFlowLayout實(shí)現(xiàn)圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實(shí)現(xiàn)圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實(shí)現(xiàn)圖片瀏覽效果的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 詳解iOS學(xué)習(xí)筆記(十七)——文件操作(NSFileManager)

    詳解iOS學(xué)習(xí)筆記(十七)——文件操作(NSFileManager)

    這篇文章主要介紹了詳解iOS學(xué)習(xí)筆記(十七)——文件操作(NSFileManager),具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-12-12
  • IOS開發(fā)仿微信消息長按氣泡菜單實(shí)現(xiàn)效果

    IOS開發(fā)仿微信消息長按氣泡菜單實(shí)現(xiàn)效果

    這篇文章主要介紹了IOS開發(fā)仿微信消息長按氣泡菜單實(shí)現(xiàn)效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 實(shí)例詳解IOS開發(fā)之UIWebView

    實(shí)例詳解IOS開發(fā)之UIWebView

    iOS開發(fā)之UIWebView 是本文要介紹的內(nèi)容,UIWebView是iOS sdk中一個(gè)最常用的控件,是內(nèi)置的瀏覽器控件,我們可以用它來瀏覽網(wǎng)頁、打開文檔等等
    2016-02-02
  • iOS實(shí)現(xiàn)列表與網(wǎng)格兩種視圖的相互切換

    iOS實(shí)現(xiàn)列表與網(wǎng)格兩種視圖的相互切換

    相信大家應(yīng)該也都發(fā)現(xiàn)了,在現(xiàn)在很多的電商app中,都會有列表視圖和網(wǎng)格兩種視圖的相互切換。例如京東和淘寶。這樣更利于提高用戶的體驗(yàn)度,所以這篇文章小編就是大家分享下利用iOS實(shí)現(xiàn)列表與網(wǎng)格兩種視圖相互切換的方法,文中介紹的很詳細(xì),感興趣的下面來一起看看吧。
    2016-10-10
  • 簡潔易用的iOS引導(dǎo)頁制作

    簡潔易用的iOS引導(dǎo)頁制作

    這篇文章主要為大家詳細(xì)介紹了iOS引導(dǎo)頁的制作方法,可滿足一般設(shè)計(jì)的需求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 深入理解iOS的狀態(tài)欄

    深入理解iOS的狀態(tài)欄

    這篇文章給大家分別介紹了iOS狀態(tài)欄隱藏的兩種方法、狀態(tài)欄樣式、背景色以及狀態(tài)欄的應(yīng)用,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • IOS Cache設(shè)計(jì)詳細(xì)介紹及簡單示例

    IOS Cache設(shè)計(jì)詳細(xì)介紹及簡單示例

    這篇文章主要介紹了IOS Cache設(shè)計(jì)詳細(xì)介紹及簡單示例的相關(guān)資料,Cache的目的是為了追求更高的速度體驗(yàn),Cache的源頭是兩種數(shù)據(jù)讀取方式在成本和性能上的差異,需要的朋友可以參考下
    2017-01-01
  • iOS如何保持程序在后臺長時(shí)間運(yùn)行

    iOS如何保持程序在后臺長時(shí)間運(yùn)行

    這篇文章主要為大家詳細(xì)介紹了iOS如何保持程序在后臺長時(shí)間運(yùn)行,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論

密云县| 宝应县| 达拉特旗| 吴川市| 高安市| 龙岩市| 黄陵县| 兖州市| 永和县| 铁力市| 炉霍县| 泾源县| 栾城县| 汤阴县| 鄂州市| 绥宁县| 江陵县| 新兴县| 云阳县| 武穴市| 庄河市| 佳木斯市| 都匀市| 铁力市| 山东省| 红原县| 隆德县| 招远市| 锡林郭勒盟| 延庆县| 昌都县| 平阴县| 菏泽市| 高密市| 柯坪县| 凭祥市| 凯里市| 房产| 怀来县| 麻阳| 耒阳市|