UITableViewCell在運用在重視出現(xiàn)一些內(nèi)容重疊吆倦,數(shù)據(jù)覆蓋等問題的解決
1.之前看到有推薦讓cell進行不重用是可以解決問題,為每一個cell指定不同的重用標(biāo)識符來解決纺荧,使得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];
}//...其他代碼}
這樣做內(nèi)存空間浪費極大,而且如果有刪除時再reload后,你會發(fā)現(xiàn)刪除的cell是最后一個cell眶根,因為cellIdentifier = [NSString stringWithFormat:@"cell%d%d", indexPath.section, indexPath.row]的原因腥放。(不推薦使用)
2.使用系統(tǒng)原生cell時 在為cell添加控件時需要注意重用問題
在if (cell==nil) {
//創(chuàng)建cell
//創(chuàng)建控件
//為控件添加tag(使cell在復(fù)用時可以取到cell上對應(yīng)的控件)
}
根據(jù)tag為控件賦值(避免控件上內(nèi)容的重復(fù))
3.使用系統(tǒng)原生cell時 在為cell添加控件時需要注意重用問題
if (cell==nil) {
//創(chuàng)建cell
}
//創(chuàng)建控件
這種情況下泛啸,每次復(fù)用cell的時候就會重新創(chuàng)建一個控件,出現(xiàn)控件重疊的情況 我們可以將之前添加的控件移除
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
4.使用xib創(chuàng)建cell時出現(xiàn)重用問題解決很簡單
- (void)prepareForReuse{
[super prepareForReuse];
}
將cell上的控件內(nèi)容置空