美文网首页
iOS tableView重用思考

iOS tableView重用思考

作者: 程序猿马国玺 | 来源:发表于2017-09-05 11:56 被阅读19次
    //供应商视图
        NSString * low_url = [item objectForKeyNotNull:@"low_url"];
        if (!low_url||low_url.length == 0)
        {
            self.shopView.hidden = YES;
        }
        else
        {
            //一些其他设置
        }
    

    错误思路:视图默认显示,需要隐藏就隐藏。
    错误分析:根据传进来的数据是否有供应商而显示供应商视图,在第一页数据中是有供应商的,默认显示供应商,没什么问题hidden = no,不需要设置。在第二页的数据中没有供应商,所以不显示供应商hidden = yes;之后再返回第一页的时候,cell是从重用池中取的,之前是什么状态就是什么状态,供应商视图会保留第二页的设置,hidden = yes不显示,这样一来本来第一页该显示供应商视图但是却被隐藏了。
    所以正确的写法应该是下面这样

    //供应商视图
        NSString * low_url = [item objectForKeyNotNull:@"low_url"];
        if (!low_url||low_url.length == 0)
        {
            self.shopView.hidden = YES;
        }
        else
        {
            self.shopView.hidden = NO;
            //一些其他设置
        }
    
    if (self.showReportButton) {
            self.reportButton.hidden = NO;
        }
        else
        {
            self.reportButton.hidden = YES;
        }
    

    这次思路没有错,有隐藏有显示,但是还是出现了视图错乱的问题。
    其实经过思考,这个错误原因与上面是类似的,表面看起来是有隐藏有显示,问题出在了showReportButton这个变量上了,布尔值默认为no,所以我只在需要显示的时候设置了showReportButton为yes。

    cell.showReportButton = YES;
    

    无论是变量还是视图,从重用池中取出来的都会保留之前的状态。
    所以在不需要显示视图的cell中也要加上一句代码

    cell.showReportButton = NO;
    

    原理相同,只是在不同的地方。

    相关文章

      网友评论

          本文标题:iOS tableView重用思考

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