0

私はUIImageViewを含むUICollectionViewを持っていて、1つの行だけです。タップしたときに画像を選択した画像に変更しようとしていますが、何らかの理由で画像が更新されません。 UIImageはUICollectionViewを呼び出したときに設定されている:UICollection UIImageViewでUImageを変更するには?

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

それが呼び出したときに、それは更新されません。

  • (無効)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

私はすでにsetNeedsDisplay、reloadData、setImageを試してみましたが、UImageView自体を無効にして、cellForItemAtIndexPathに設定していないことを確認してください。

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

    UICollectionViewCell *cell; 
    UIImage *curImage; 

    static NSString *cellAvatarMediaIdentifier = @"cvAvatarCell"; 


    cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellAvatarMediaIdentifier forIndexPath:indexPath]; 

    Child *currentChild = [self.children objectAtIndex:indexPath.row]; 

    curImage = [UIImage imageNamed:@"male.png"]; 

    UIImageView *childSilhouetteView = (UIImageView *)[cell viewWithTag:300]; 

    if (curImage != nil) 
    { 
     // this WORKS !!!! 
     [childSilhouetteView setImage:curImage]; 
    } 

    return cell; 
} 

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

     Child *currentChild = [self.children objectAtIndex:indexPath.row]; 

     UIImageView *childSilhouetteView = (UIImageView *)[collectionView viewWithTag:300]; 

     selectedImage = [UIImage imageNamed:@"male_selected.png"]; 

     if (selectedImage != nil) 
     { 
       // This does NOT work, image is never updated 
       NSLog(@"Before setting image"); 
       childSilhouetteView = nil; 

       [childSilhouetteView setImage:selectedImage]; 
       [childSilhouetteView setNeedsDisplay]; 
       [collectionView reloadData]; 
     } 
} 

答えて

0

また、現在あなたがタグ付きcollectionViewのビューにアクセスしている、didSelectItemAtIndexPath:に対応する子を見つける必要があります。

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

     Child *currentChild = [self.children objectAtIndex:indexPath.row]; 

     UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 

     UIImageView *childSilhouetteView = (UIImageView *)[cell viewWithTag:300]; 

     selectedImage = [UIImage imageNamed:@"male_selected.png"]; 

     if (selectedImage != nil) 
     { 
       // This does NOT work, image is never updated 
       NSLog(@"Before setting image"); 
       // childSilhouetteView = nil; 

       [childSilhouetteView setImage:selectedImage]; 
       [childSilhouetteView setNeedsDisplay]; 
       // [collectionView reloadData]; 
     } 
} 

あなたがreloadDataを呼び出す場合は、あなたのビューに、デフォルトの画像が表示されますので、あなたのcollectionViewが再描画されます。

0

まず、特定のセルのアイテムにアクセスするには、まずセルを取得する必要があります。

チェックこの回答: UICollectionView didSelectRowAtIndexPath doesn't work

第二に、コンパイラはあなたが画像を確認している状態に起こっていることを確認してくださいはnilであるかどうか。同じ名前のassetsフォルダに "male_selected.png"が存在することを確認してください。

第3ステップは、不要なコードをすべて削除することです。あなたは次に行くことをお勧めします

関連する問題