1. 程式人生 > >TableViewCell的複用出現數據重複的解決方法

TableViewCell的複用出現數據重複的解決方法

用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;
}