

ビューにコレクションビューを使っています。  
コレクションビューに後からセクションを追加できるようにしています。  
そして、その追加されたセクションに付いているボタンをタップして、それぞれカメラロールから写真を選択し、表示できるようにしたいと考えています。

今のところセクションを追加しカメラロールから写真を選択して表示できるのですが、写真を選択するとすべてのセクションの選択された写真が表示されてしまいます。  
おそらくreloadDataでコレクションビューのデータをすべて更新してしまってるからだと思うのですが...

[code]

    //画像選択後の処理
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        NSLog(@"画像選択後の処理");
        UIImage *originalImage = (UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage];
        UIImage *editImage = (UIImage *)[info objectForKey:UIImagePickerControllerEditedImage];
    
        UIImage *saveImage;
    
        if (editImage) {
            saveImage = editImage;
        } else {
            saveImage = originalImage;
        }
    
        //ここで選択された画像を表示する
        [self addSelectedPicture:self item:saveImage];
    
        [picker dismissViewControllerAnimated:YES completion:nil];
    
        //ここでreloadしないと画像選択後に戻ったときに表示されない
        [self.collectionView reloadData];
        //[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0] ];
    }
    
    
    - (void)addSelectedPicture:(SubjectViewController *)controller item:(UIImage *)item
    {
        [_images addObject:item];
    
        [self.collectionView reloadData];
        //[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
    }
    
    
    
    
    - (void)addItemViewCOntrollerDidFinish2:(AddDateViewController *)controller item:(NSString *)item
    {
        if (!_objects4) {
            _objects4 = [[NSMutableArray alloc] init];
        }
    
        [_objects4 insertObject:item atIndex:0];
    
        [_sectionDates insertObject:controller.makeDate.date atIndex:0];
    
        //ここでreloadDataにするとセクションが追加されるたびに全体が更新されてしまう
        [_collectionView reloadData];
        //以下をやると最初はセクションがないからエラーになる
        //[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
    
        [self dismissViewControllerAnimated:YES completion:NULL]; 
    }
    
    
    
    
    //コレクションビューのセルに表示する画像
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        UICollectionViewCell *cell;
        cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell"forIndexPath:indexPath];
    
        UIImageView *imageView = (UIImageView *)[cell viewWithTag:1];
    
        imageView.image =_images[indexPath.row];
    
        return cell;
    }
    
[/code]

セクションを追加し、その追加されたセクションにそれぞれ個々の画像を表示するにはどのようにすればいいでしょうか。  
どなたかご教授いただければと思います。  
よろしくお願い致します。


CC BY-SA 3.0
2015-03-20T07:30:17.550
8174
2016-10-27T05:15:55.057
2015-04-24T05:02:34.543
3227
8802
question
ios objective-c iphone
collectionviewのセクションごとの写真表示について


選択した画像を一次元配列で保持しているとお見受けしましたが、  
セルではなくセクションを追加するのであれば二次元配列等で保持した方が良いのではないでしょうか？

一次元配列

[code]

    // セクションが変わるとrowも0に戻るので同じ位置が取得される
    _images[indexPath.row];
    
[/code]

二次元配列

[code]

    // セクションごとに画像を保持する
    _images[indexPath.section][indexPath.row];  
    
[/code]

----- 追記 -----
[code]

    [_images addObject:item];
    
[/code]

こちらの修正はされていますか？  
配列の中に配列を格納するので、

[code]

    [_images addObject:@[item]];
    　or
    _images[0] = @[item];
    
    // 冗長に書くとこんな感じ
    NSMutableArray* array = [NSMutableArray new];
    [array addObject:item];
    [_images addObject:array];
    
[/code]

のような記述になります。  
上記の例から添え字部分を変更する必要がありますが、  
質問に記載されている実装だと`addSelectedPicture`内で`indexPath`が取得できないので、  
そのあたりは検討が必要になると思います。


CC BY-SA 3.0
2015-03-20T09:29:56.783
8187
2015-03-24T10:56:16.043
2015-03-24T10:56:16.043
3516
3516
8174
answer