美文网首页iOS DeveloperiOS 开发
UITableViewCell遇到的重用问题的解决

UITableViewCell遇到的重用问题的解决

作者: 别叫我超人 | 来源:发表于2016-06-16 11:11 被阅读810次

    UITableViewCell在运用在重视出现一些内容重叠,数据覆盖等问题的解决

    1.之前看到有推荐让cell进行不重用是可以解决问题,为每一个cell指定不同的重用标识符来解决,使得cell不能重用

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

    {

    NSString *cellIdentifier = [NSString stringWithFormat:@"cell%d%d", [indexPath section], [indexPath row]];//以indexPath来唯一确定cell

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; //出列可重用的cell

    if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    }//...其他代码}

    这样做内存空间浪费极大,而且如果有删除时再reload后,你会发现删除的cell是最后一个cell,因为cellIdentifier = [NSString stringWithFormat:@"cell%d%d", indexPath.section, indexPath.row]的原因。(不推荐使用)

    2.使用系统原生cell时 在为cell添加控件时需要注意重用问题

    在if (cell==nil) {

    //创建cell

    //创建控件

    //为控件添加tag(使cell在复用时可以取到cell上对应的控件)

    }

    根据tag为控件赋值(避免控件上内容的重复)

    3.使用系统原生cell时 在为cell添加控件时需要注意重用问题

    if (cell==nil) {

    //创建cell

    }

    //创建控件

    这种情况下,每次复用cell的时候就会重新创建一个控件,出现控件重叠的情况 我们可以将之前添加的控件移除

    for (UIView *view in cell.contentView.subviews) {

    [view removeFromSuperview];

    }

    4.使用xib创建cell时出现重用问题解决很简单

    - (void)prepareForReuse{

    [super prepareForReuse];

    }

    将cell上的控件内容置空

    相关文章

      网友评论

        本文标题:UITableViewCell遇到的重用问题的解决

        本文链接:https://www.haomeiwen.com/subject/wgsmdttx.html