使用UITableViewCell遇到的问题

UITableView这个控件在iOS项目中几乎随处可见,甚至可以说每个应用中都有这个控件。可见此控件应用率之高。

最近在使用此控件时却遇到了一些问题,UITableView上的每个小的控件是UITableViewCell。大多数的UITableViewCell都需要自定义,这样会更灵活些,能满足我们功能上的需求。先说我的问题吧:

项目需求:一个UITableView上有两种类型的UITableViewCell。

根据项目需求这时需要自定义两种类型的UITableViewCell(这里我们称为A、B两种类型)。在我定义好了两种UITableViewCell之后在使用的时候却出现了问题:在我使用B类型对象的时候Xcode却告诉我此对象是A类型的对象,因此不能调用B类型对象的相关方法。我当时就蒙了,我明明利用B类创建的对象怎么就成了A类对象呢?代码如下:

1.if (row!=scoreModelArr.count) {

2.              ScoreModel * scoreModel = [scoreModelArr objectAtIndex:row];

3.                ScoreCell * cell = [ScoreCell cellWithTableView:tableView];

4.                cell.scoreModel = scoreModel;

5.                return cell;

6.            } else{ // 最后一个单元格

7.                FooterCell * cell = [FooterCell cellWithTableView:tableView];

8.                cell.atlasArr = atlasArr;

9.                return cell;

10.            }

警告出现在第8行代码,警告此cell是ScoreCell类型,此对象没有setAtlasArr这个方法。当时我以为是Xcode的一个bug呢,最后发现还是我的问题.

发现原因:我跳到了方法:[FooterCell cellWithTableView:tableView];中,发现问题出现在了这里。代码如下:

+ (instancetype)cellWithTableView:(UITableView *)tableView

{

    static NSString * cellID = @"cellID";

    id cell = [tableView dequeueReusableCellWithIdentifier:cellID];

    if (!cell) {

        cell = [[self alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];

        NSLog(@"...");

    }

    

    return cell;

}

咋一看是没有什么问题,可当我再跳到方法: [ ScoreCell cellWithTableView :tableView];中的时候发现这里代码和上面的代码完全一样,连CellID都是一样。由于UITableViewCell的唯一标识符都是一样的,让Xcode认为两种Cell都是一样的。

解决:在我将CellID修改之后,此问题得到了解决。

教训:切记唯一标识符的意义。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值