2

通常の UIViewController 内に UICollectionView があります。

コレクションビュー内で、ストーリーボードのコレクションビューセルの再利用可能な UI を設計しました。

collectionviewcell の内部には、セル indexpath.row と 5 つの UIButtons を表示するラベルがあり、選択すると色が変わり、選択されたままになります。

コレクションビューを設定して、30 を超えるセルが要求された場合にコレクションビューが水平にページングされ、コレクションビューのレイアウトも水平になるようにしました。

アプリケーションは問題なく動作し、適切にスクロールし、セルを正しくレイアウトします。

私が抱えている問題は、たとえばコレクションビューセルのセル 1 のボタン A (100 個のセルをレイアウトすることを想定) を選択し、2 ページ (60 個以上のセル) をページ 3 にページすると、セル番号 75 のボタン A が選択されます。 . さらに、最後 (100 セル) までスクロールしてページ 3に戻ると、セル番号 75 のボタン A が選択されたままになりますが、セル番号 64 のボタン A が選択されます。

コードの一部を次に示します。 cell.m - ユーザーからのアクションを制御します。

- (IBAction)bubbleButtons:(id)sender {
    for(UIButton *bubbleCell in self.bubbleButtons) {
            if (bubbleCell.touchInside && !bubbleCell.selected) {
                bubbleCell.selected = YES;
            } else if (bubbleCell.touchInside && bubbleCell.selected) {
                bubbleCell.selected = NO;
            }
      }

 }

MainViewContoller.m - ストーリーボードで作成した UICollectionViewCell からセルを設定します

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
                 cellForItemAtIndexPath:(NSIndexPath *)indexPath {
        Cell *cell1;
        cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID
                                                         forIndexPath:indexPath];
        cell1.numMainLabel.text = [NSString stringWithFormat:@"%d |",indexPath.row+1];
        return cell1;

何が間違っているのか、何がこのバグを引き起こしているのかよくわかりません。ビューの新しい部分が表示されたときにビューがリロードされることに関係していると思いますが、それは単なる推測です。助けていただければ幸いです。

  • ザック
4

2 に答える 2

2

おそらく、再利用可能なビューが再利用されているためです。

これを行う適切な方法は、カスタムの再利用可能なビュー サブクラスを作成することです。そして、それらの 5 つのボタンの選択を保存します。

        cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID

この行は、新しいセルを提供する場合と提供しない場合があります。以前に使用されたセルを提供する場合があります。そのため、そこで選択を更新する必要があります。または、再利用しているセルと同じままです。

于 2013-09-21T18:50:16.513 に答える
0

Uicollection は、その時点で表示されていたセルのみを生成するため、表示されているビューからセルが消えると、新しいセルに置き換えられます。

したがって、セル 75 を選択し、セル 75 が表示されなくなるまで下にスクロールしてから、セル 75 に戻ると、新しいセルが生成されます。新しいボタンは新しいため、選択されていません。

それでできることは、どのボタンが選択されたかを保存することです。

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

その時点で表示されているボタンを選択する必要があるかどうかを尋ねます。

その助けを願っています

于 2014-04-25T00:41:48.523 に答える