iOS tableView重用思考
2017-09-05 本文已影响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;
原理相同,只是在不同的地方。