91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS怎么讓tableview支持不同種類的cell

發布時間:2021-02-20 11:47:15 來源:億速云 閱讀:419 作者:小新 欄目:移動開發

這篇文章主要介紹了iOS怎么讓tableview支持不同種類的cell,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

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

效果圖如下:

iOS怎么讓tableview支持不同種類的cell

準備工作

創建一個基類的CDZBaseCell,基類cell擁有一些共用的屬性和方法,如持有model,解析model。

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

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

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

先在tableview創建時注冊需要的不同種類,再判斷index對應的種類,再根據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中根據重用標識加載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時創建不同identifer的cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中判斷cell是否為nil,并根據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;
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“iOS怎么讓tableview支持不同種類的cell”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和林格尔县| 宝坻区| 光泽县| 苏尼特右旗| 胶南市| 东港市| 三原县| 舞钢市| 盘锦市| 惠水县| 辽宁省| 南川市| 石景山区| 桑植县| 延安市| 万载县| 九寨沟县| 鲜城| 吉水县| 天门市| 公安县| 合江县| 大埔区| 杂多县| 深州市| 教育| 黔西县| 资源县| 顺昌县| 扎兰屯市| 高雄县| 纳雍县| 梅州市| 长宁区| 清水县| 闽清县| 临夏市| 绍兴市| 白玉县| 乌拉特中旗| 铜陵市|