-2

私のUITableViewControllerUICollectionViewControllerのグラフィックス操作が動作しない理由がわかりません。UITableViewCellとUICollectionViewCellのコンテンツを変更できません

私は両方とも同じ問題があります。

これは私が使用したいが、私はシンプルなコードを試したコードですが、

-(void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 

UICollectionViewCell* cell=[self collectionView:collectionView cellForItemAtIndexPath:indexPath]; 

id someInCell=[cell viewWithTag:1]; 

if ([someInCell isKindOfClass:[UIImageView class]]) { 

    UIImageView* imageViewOfCell=(UIImageView*)someInCell; 

    id someInArray=[self.arrayOfUUID objectAtIndex:(indexPath.row)]; 

    if ([someInArray isKindOfClass:[NSUUID class]]) { 
     NSUUID* UUID=(NSUUID*)someInArray; 
     Itinerari* itinerario=[self.contenitore itineraryWithUUID:UUID]; 
     imageViewOfCell.image=[UIImage imageNamed:@"2"]; 
     NSLog(@"ok"); 

    } 
} 

}

動作しないコンソールは私に「OK」メッセージが表示されますが、私のImageViewのイメージにはありません変化する。

私はUITableViewCellと同様の問題を抱えています。

答えて

0

はい、このキーのアイデアを適用するとコードが簡素化され、正しく動作します。セルを取得して更新しないでください。代わりに、データソースを変更して、テーブル(またはコレクション)に更新する必要があることを伝えます。

データソースは、オブジェクトの配列を維持する必要があり、それらの(モデル)オブジェクトは、(テーブルの行に行)細胞から細胞へ変化すべてを記述するべきです。したがって、たとえば、ラベルやイメージビューを持つテーブルは、多分このように、文字列や画像を含む配列を必要とします:

NSArray *model = @[ 
    [@{ @"text": @"cell0", @"image": [UIImage imageNamed:@"image0"] } mutableCopy], 
    [@{ @"text": @"cell1", @"image": [UIImage imageNamed:@"image1"] } mutableCopy], 
    // etc 
] 

それは、これはアプリのですNSObjectサブクラスの配列の場合であっても良くモデルではなく、変更可能な辞書です。

あなたのセルまたは行カウント方法は [model count];を返す必要があります

、およびindexPath方法であなたのセルまたは行は、常にこの操作を行う必要があります...これにより

NSDictionary *d = self.model[indexPath.row]; 
cell.label.text = d[@"text"]; // if your cell has a label in this e.g. 
cell.imageViewOfCell.image = d[@"image"]; 

、それはコレクションやテーブルビューを変更するのは簡単です:データソースを変更し、更新するビューを伝える:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    NSMutableDictionary *d = self.model[indexPath.row]; 
    d[@"image"] = [UIImage imageNamed:@"2"]; 
    [collectionView reloadData]; 
} 

ビューをセル/行atIndexPathを呼び出しますし、その方法は、常に今の選択によって更新されたモデルを指します。

+0

ただ一つの行を更新するために 'reloadData'を呼び出さないでください。 – rmaddy

+0

コレクションがコレクションビューとテーブルビューの両方で実装されているため、あまり具体的でないリロードを選択しました。 – danh

+0

@danhしかし、なぜこのビデオでは、彼はそれを簡単にすることができますか? [link](https://youtu.be/cCAfeTqsE_Y?t=895) – ndPPPhz

関連する問題