2013-05-13 81 views
4

我使用UICollectionView重新載入數據時遇到問題。我對viewDidLoad這個數組填補了UICollectionView.UICollectionView重新載入數據問題

array = [[NSMutableArray alloc] init]; 
[array addObject:@"1"]; 
[array addObject:@"2"]; 
[array addObject:@"3"]; 
[array addObject:@"4"]; 
[array addObject:@"5"]; 
[array addObject:@"6"]; 

和方法:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellIdentifier = @"Cell"; 
    //cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    myCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]; 

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 100, 20)]; 
    [titleLabel setText:[array objectAtIndex:indexPath.row]]; 
    titleLabel.textColor = [UIColor whiteColor]; 
    titleLabel.backgroundColor = [UIColor clearColor]; 
    [cell addSubview:titleLabel]; 

    return cell; 
} 

我挖掘UIButton和數據重新加載:

[myCollectionView reloadData]; 

這裏的數據如何外觀就像重裝前後一樣: Before

After

回答

12

您每次點擊重新加載按鈕時都會添加一個新標籤。您應該添加標籤一次並根據標籤文本更改。

這裏有個簡單的例子。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    MyCell *cell = (MyCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" 
                       forIndexPath:indexPath]; 
    [cell setMyTextLabel:indexPath.row]; 
    return cell; 
} 

其中MyCell遺囑載有UILabel和屬性修改其文本。

我真的建議看看Fun with UICollectionView代碼@Ben Scheirman

希望有所幫助。

P.S.將myCell重命名爲MyCell。一個類應該以大寫字母開頭。

+0

請告訴我什麼是「MyCell」,是否爲 – Chandru 2014-10-01 07:13:52

+0

還有什麼更好的辦法?你必須創建自定義單元格,以避免在uicollectionview中緩存數據 – TomSawyer 2014-10-24 13:54:14

1

當您點擊重新加載按鈕時,您正在添加您的標籤。在這種情況下,你一次又一次地將標籤...

因此,有三種解決方案:

  • 讓你的電池可重複使用的
  • 從上海華盈在重載方法刪除你的細胞。
  • 您可以檢查標籤的text長度是否不等於零。在這種情況下,不需要添加該標籤並更改文本。
+0

但如何從重裝的上海華除去細胞? – ThePunisher 2013-05-13 08:50:49

1
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
     UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; 
dispatch_async(dispatch_get_main_queue(), ^{ 

    // ********* Changed ******* 

     for (UIView *v in [cell.contentView subviews]) 
     [v removeFromSuperview]; 

// ********** Changed ********** 
      if ([self.collectionviewFlow.indexPathsForVisibleItems containsObject:indexPath]) { 
      NSString *img_name=[NSString stringWithFormat:@"%@_thumb%d.png",self.VaritiesName,(int)indexPath.row+1]; 
      imageVw=[[UIImageView alloc]initWithImage:[UIImage imageNamed: img_name]]; 
      imageVw.frame=CGRectMake(10,10,100,100); 
      [cell.contentView addSubview:imageVw]; 
      } 
     }); 
    cell.backgroundColor=[UIColor clearColor]; 
    return cell; 
} 
+0

@pradhyuman sinh:嗨,我也面臨着與100個單元格相同的問題。我試過你的解決方案,但它不適用於我的iOS 8。請告訴我解決方案停止重疊關閉單元格問題。 – chaaruu 2014-12-18 12:41:10

0

這是退出晚了,但這裏是我的解決方案。

,如果你自定義的collectionviewcell使用 嘗試「FUNC prepareForReuse()」使用