一個(gè)Xib里面創(chuàng)建兩種不同的cell及一些關(guān)于tableview的筆記

1.UITableView的復(fù)用機(jī)制

首先我們看蘋果所給出的優(yōu)化方案:

TableViewCell有一個(gè)緩存池機(jī)制,如果cell完全移出了視線外(即屏幕之外),則將這個(gè)cell存放到緩存池之中,等待復(fù)用;

為了區(qū)別每一種不同的cell,將每種不同的cell綁定上一個(gè)identifier,在顯示新的cell的時(shí)候,delegate會通過identifier決定出現(xiàn)哪種cell;

UITableView每當(dāng)顯示一個(gè)新的cell的時(shí)候,都會去調(diào)用其Delegate的方法

    - (UItableViewCell *)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    }

方式一:

通常的做法是,從緩存池里面尋找,是否有可以循環(huán)利用的cell?

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

如果沒有,就重新創(chuàng)建一個(gè)新的cell,這個(gè)cell在創(chuàng)建的時(shí)候,需要綁定一個(gè)identifier;

    if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
            }

注意這個(gè)identifier,由于這個(gè)返回cell的方法調(diào)用非常頻繁,最好將其用一個(gè)靜態(tài)變量存放起來,避免重復(fù)開辟內(nèi)存;

(被static修飾的局部變量只會初始化一次,在整個(gè)程序的運(yùn)行中只有一份內(nèi)存)

    static NSString *identifier = @"cell";

方式二:

如果沒有cell,也可以在viewDidLoad的時(shí)候,進(jìn)行注冊,告訴TableView:將要用到cell的時(shí)候,就創(chuàng)建這個(gè)類型及這個(gè)標(biāo)識的cell;

可以注冊class或者Nib的cell;

    [self.newsTableView registerNib:[UINib nibWithNibName:@"JMTableViewCell" bundle:nil] forCellReuseIdentifier:@"cell"];

2.一個(gè)Xib里面創(chuàng)建兩種不同的cell,然后在一個(gè)tableView里面使用

這個(gè)方法比較特殊,在自建的TableViewCell的Xib里面,可以拖入多個(gè)cell,cell的順序要看左邊欄的順序,即最上面的是0,下面一個(gè)是1,等等;

如圖

idenAndCell.png

在這個(gè)方法中,不采用注冊的方法,只需在返回cell的方法中進(jìn)行標(biāo)識區(qū)分即可;

這樣做可以有效地減少工作量,避免新建另一個(gè)Xib,而數(shù)據(jù)又和別的Xib的數(shù)據(jù)一樣;這種重復(fù)勞動(dòng)顯然是不必要的

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        //model對應(yīng)數(shù)據(jù)源的數(shù)組順序
        JMNewsModel *model = [[JMNewsModel alloc]init];
        model = self.dataArray[indexPath.row];
        //創(chuàng)建cell
        JMNewsTableViewCell *cell = [[JMNewsTableViewCell alloc]init];
        //根據(jù)img_type來確定是哪種cell
        //復(fù)用和創(chuàng)建都嵌入if內(nèi)部
        if (model.img_type == 2) {
            cell = [tableView dequeueReusableCellWithIdentifier:@"iden"];
            if (!cell) {
                cell = [[[NSBundle mainBundle]loadNibNamed:@"JMNewsTableViewCell" owner:nil options:nil]objectAtIndex:1];
            }
        }else if (model.img_type == 0) {
            cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
            if (!cell) {
                cell = [[[NSBundle mainBundle]loadNibNamed:@"JMNewsTableViewCell" owner:nil options:nil]objectAtIndex:0];
            }
        }
        //cell的數(shù)據(jù)賦值
        cell.model = model;
        return cell;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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