UITableViewCell中的cell addSubView和cell.contentView addSubview

在自定义UITableViewCell时,添加子视图有直接添加到cell和添加到cell.contentView两种方式。通常推荐使用cell.contentView.addSubview,因为在ios7及更低版本中,cell.subviews可能无法正确获取到子视图。而在ios8及以上系统,系统能自动处理。为确保兼容性,建议始终使用cell.contentView.addSubview。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们定制TableViewCell的时候,往往根据个性需求不同,会在cell上加不同的内容。在cell上添加子视图的方式有两种。例如我在cell上加一个Label:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:thirdIdentifier];
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:thirdIdentifier] ;
            //北京市
            CGFloat widths = SCREEN_WIDTH-130;
        CGFloat lefts = 100;
        if (is_ios6) {
            lefts = 30;
            widths = SCREEN_WIDTH - 80;
        }
        UILabel *tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(lefts,0, widths, cell.height)];
        tempLabel.backgroundColor = [UIColor clearColor];
        tempLabel.tag = indexPath.row+100;
        tempLabel.font = [UIFont systemFontOfSize:14.0f];
        tempLabel.textAlignment = NSTextAlignmentRight;
        tempLabel.text = _remindArray[indexPath.row];
        [cell.contentView addSubview:tempLabel];//建议使用
   //    [cell addSubview:tempLabel];

加子视图的两种方式,一种是直接加在cell上,另一种是直接加在cell.contentView上。之前我为了方便一直都直接加在cell上,并认为他们并无区别。但是直到今天我遇到一个奇怪的问题,引起了我的重视。当我想要找到我添加到cell上的某个特定的子视图时,通过以下方法。

//根据选中的行数来改变对应的cell的内容
-	(void)changeLabelTextWithCode:(NSInteger)code WithTextLabel:(NSString *)text WithPickViewText:(NSString *)rowText
//rowText表示要更换的内容
{
    //获取到当前的cell
    UITableViewCell *cell = [self.orderLevelView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:code-1 inSection:0]];
    for (UIView *views in cell.subviews) {
        if ([views isKindOfClass:[UILabel class]]) {
            UILabel *label = (UILabel *)views;
            if (![label.text isEqualToString:text]) {
                label.text = rowText;
            }
        }
    }

}

但是发现通过cell.subviews根本找不到我添加的label,经研究发现,把label加在cell.contentView上,查找时通过cell.contentView.subviews就可以完美的解决这个问题。看来写代码的时候真不能想当然的认为简单的就是最好的。

(ios8系统比较强大,可以自己分辨出加在cell上的子视图。可以不用加在cell.contentView上,但是目前大家都还要兼顾ios7甚至6系统。所以建议还是加在cell.contentView上吧)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值