TableViewCell的複用出現數據重複的解決方法
阿新 • • 發佈:2019-01-25
用tableview的時候特別容易會出現cell的資料重複問題,所以就整理了下解決辦法,以後用起來方便,同時也希望對大家有所幫助。
第一種cell的複用寫法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithReuseIdentifier:kIdentifier forIndexPath:indexPath];
return cell;
}
這種複用寫法當出現數據重複的時候可以用下面的解決方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithReuseIdentifier:kIdentifier forIndexPath:indexPath];
for(UIView *view in cell.subviews){
if (view){
[view removeFromSuperview];
}
}
return cell;
}
第二種cell的複用寫法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
return cell;
}
當用這種寫法複用cell的時候,出現數據重複,可以用以下方法解決
- 1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 定義唯一標識
static NSString *CellIdentifier = @"Cell";
// 通過indexPath建立cell例項 每一個cell都是單獨的
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
return cell;
}
- 2
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 定義cell標識 每個cell對應一個自己的標識
NSString *CellIdentifier = [NSString stringWithFormat:@"cell%ld%ld",indexPath.section,indexPath.row];
UITableViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
return cell;
}