2016-03-24 5 views
0

自分のUICollectionViewをスクロールすると、いくつかのセルと時間にUILabelが表示されます。他のセルはセルに表示されますが、すべてではなく、どのように修正するのですか?あなたバグ:私のUILabelは単一のセルに表示され、修正する方法は?

ありがとうございました。このラベルは、同じラベルを他の細胞と混合

// cellForItemAtIndexPath

self.date = [NSDate dateWithTimeIntervalSince1970:[[searchResult objectForKey:@"drawDate"] intValue]]; 
        self.dateFormatter = [[NSDateFormatter alloc] init]; 
        [self.dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]]]; 
        [self.dateFormatter setDateStyle:NSDateFormatterShortStyle]; 

       cell3.titleContest.hidden = YES; 
       cell3.titleContest.alpha = 0; 
       //self.dateContest.text = @""; 

       NSTimer *timer = [[NSTimer alloc] init]; 

       timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES]; 

// countDownTimer

- (void)updateCounter:(NSTimer *)tmr 
     { 
      NSTimeInterval iv = [self.date timeIntervalSinceNow]; 
      int d = iv/86400; 
      int h = (iv/3600) - (d * 24); 
      int m = (iv - (h + d * 24) * 3600)/60; 
      int s = lroundf(iv) % 60; 
      cell3.titleContest.text = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", d, h, m, s]; 
      if (d + h + m + s <= 0 

) { 
       [tmr invalidate]; 
      } 

     [UIView animateWithDuration:0.5 animations:^{ 
      cell3.titleContest.hidden = NO; 
      cell3.titleContest.alpha = 1; 
     } completion:^(BOOL finished) { 

     }]; 
    } 

答えて

0

これはテーブルセルのリサイクルによって発生し、UICollectionViewは毎回まったく新しいセルを作成せず、古いセルをリサイクルして新しいセルとして使用します。それが正しく

documentationからそのデータを表示するために適切なデータを設定し、その後cellForItemAtIndexPathにdequedされた後、あなたは常に、細胞の状態をリセットする必要がありますあなたから

- dequeueReusableCellWithReuseIdentifier:forIndexPath: 

呼び出し、このメソッドをコレクションビューの新しいセルを に指定するように要求されたときに、データソースオブジェクトを削除します。このメソッドは、既存の セルが利用可能であれば、そのセルをデキューするか、または以前登録したクラスまたは nibファイルに基づいて新しいセルを作成します。 forCellWithReuseIdentifier:または registerNib:forCellWithReuseIdentifier:

重要あなたは registerClassを使用して、クラスやペン先のファイルを登録する必要があり、この メソッドを呼び出す前に、方法。

指定した識別子のクラスを登録し、新しいセル を作成する必要がある場合、このメソッドは initWithFrame:メソッドを呼び出してセルを初期化します。 nibベースのセルの場合、このメソッドは、指定されたnibファイルからセル オブジェクトをロードします。既存のセルが再利用のために利用可能な場合は、このメソッドはセルのprepareForReuseメソッド を呼び出します。

+0

を再利用して出ていき来るが、私はそれを置くために持っているコードにするために起因するリサイクルの細胞に発生しますカスタムセルで? –

+0

リセット状態コード? 'cellForItemAtIndexPath'から直接呼び出すことも、' cellForItemAtIndexPath'から呼び出す関数の中でcustomCell.mの中に入れることもできます。 – Fonix

+0

はい、リセットするコードは何ですか?分かりません –

0

これはオーバーそれはちょうどテーブルビューセルをALLOCとはい、私は理解して細胞

UITableviwCell *cell = [UITableViewCell alloc]init]; 
cell.label.text = ...... 
関連する問題