創(chuàng)建UITableViewCell的三種方法

UItableView和UIcollectionView是日常生活中應(yīng)用最多的,可以實現(xiàn)很多功能,創(chuàng)建的方式也有幾種,下面簡單總結(jié)下,創(chuàng)建UItableViewCell的幾種情況:

1.通過加載storyBoard的UItableViewCell

在sotrybord中拖入的tableView中,選中Content,里面就有靜態(tài)cell和動態(tài)cell了。其中兩者的區(qū)別是,靜態(tài)cell固定不動,直接通過控制面板添加屬性就可以創(chuàng)建了,而動態(tài)cell也就是當(dāng)我們拖入tableView,需要實現(xiàn)數(shù)據(jù)源方法才有數(shù)據(jù)顯示的就是動態(tài)cell。

動態(tài)cell代碼如下:

```

- (NSInteger) numberOfSectionsInTableView:(UITableView *)和- (NSInteger)

numberOfSections方法默認(rèn)是1組,這個代理方法可以不寫,如果不寫那么,系統(tǒng)默認(rèn)是一組

-tableView(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

```

這兩個方法是必須實現(xiàn)的,如果不實現(xiàn),那么系統(tǒng)會崩潰。其中系統(tǒng)的UITableViewCell有三個自帶的屬性分別是:imageView 、textLabel、detailTextLabel 。分別給三個屬性賦值,實現(xiàn)了最基本的數(shù)據(jù)源方法,那么基本就有數(shù)據(jù)顯示了。

2.通過代碼創(chuàng)建UItableViewCell

代碼創(chuàng)建UItableViewCell,其中代碼需要明白為什么需要自定義代碼創(chuàng)建cell?

代碼創(chuàng)建cell,主要是因為系統(tǒng)的cell不能滿足開發(fā)的需要。這里普及下cell的重用機制。每一個UITableView里都維護著一個cell隊列,當(dāng)UITableView剛加載的時候,cell隊列里是沒有任何數(shù)據(jù)的。dequeueResableCellWithIdentifier從字面上理解就是”出列可重用的cell",也就是根據(jù)一個標(biāo)識identifier從cell隊列里取出一個UITableViewCell,也就是從緩沖池加載cell,當(dāng)然了,如果cell隊列里沒有此標(biāo)識的cell,調(diào)用此方法的結(jié)果就是返回nil。因此,在UITableView剛加載的時候,cell隊列里沒有可用的cell,所以必須通過語句

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

來創(chuàng)建對應(yīng)CellIdentifier標(biāo)識的UITableViewCell實例。

[ tableView:cellForRowAtIndexPath:方法主要是根據(jù)nsindex取得一個cell ]

而當(dāng)UITableView在滾動的時候?qū)е耈ITableViewCell滾出手機屏幕視圖的時候,程序會將這一個UITalbeViewCell實例放入此UITableView所維護的cell隊列中(緩沖池中)。當(dāng)UITableview中有新的UITableViewCell需要展現(xiàn)在手機屏幕視圖上時,就會調(diào)用tableView:cellForRowAtIndexPath:方法了。因此我們可以知道以下幾點:

1-重取出來的cell是有可能已經(jīng)捆綁過數(shù)據(jù)或者加過子視圖的,所以,如果有必要,要清除數(shù)據(jù)(比如textlabel的text)和remove掉add過的子視圖(使用tag)。

2-這樣設(shè)計的目的是為了避免頻繁的 alloc和delloc cell對象而已,沒有多復(fù)雜。

3-設(shè)計的關(guān)鍵是實現(xiàn)cell和數(shù)據(jù)的完全分離

重點代碼:

在自定義的cell的.m文件返回自定義的cell

+ (instancetype) heroCell:(UITableView *)tableView

{

static NSString *ID=@"hero";

//1.查找可重用cell

CZHeroCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];

//2.判斷是否成功獲取了可重用cell,如果沒有,則創(chuàng)建

if (cell==nil) {

cell=[[CZHeroCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

}

//3.返回

return cell;

}

那么在控制器的數(shù)據(jù)源方法中,就可以直接調(diào)用封裝好的創(chuàng)建cell的方法,直接創(chuàng)建cell。

3.用xib創(chuàng)建cell

其中用xib創(chuàng)建cell的時候,需要注意的是在自定義cell的類中,需要告訴cell是通過xib 創(chuàng)建的

+ (instancetype)tgCell ?//封裝cell

{

//創(chuàng)建cell--告訴從xib文件創(chuàng)建cell

NSBundle *bundle=[NSBundle mainBundle];

CZTgCell *cell=[[bundle loadNibNamed:@"CZTgCell" owner:nil options:nil] lastObject];

return cell;

}


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2016.3.12

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容