3

その中にviewcontrolleruicollectionviewがあります。

次のコードを使用しましたがuicollectionview、黄色のボックスだけで、目に見える画像はありません:

myviewcontroller.h

{
IBOutlet UICollectionView *gallery1;
//IBOutlet UIImage *inimage;
NSArray *recipePhotos;
}

@property (nonatomic, retain) IBOutlet UICollectionView *gallery1;
//@property (nonatomic, retain) IBOutlet UIImage *inimage;

および myviewcontroller.m

- (void)viewDidLoad
{
[super viewDidLoad];

recipePhotos = [NSArray arrayWithObjects:@"im1.png","im2.png", "im3.png", "im4.png", "im5.png", "im6.png",  nil];

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setItemSize:CGSizeMake(100, 100)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[self.gallery1 setCollectionViewLayout:flowLayout];
[self.gallery1 setAllowsSelection:YES];
self.gallery1.delegate=self;
}

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection: (NSInteger)section {
return recipePhotos.count;
}

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView {
return 1;
}

// cellforitematindexpath

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

[gallery1 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:[NSString stringWithFormat:@"c%d",indexPath.row]];
UICollectionViewCell *cell = [gallery1 dequeueReusableCellWithReuseIdentifier:[NSString stringWithFormat:@"c%d",indexPath.row] forIndexPath:indexPath];

cell.backgroundColor = [UIColor yellowColor];
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:[recipePhotos objectAtIndex:indexPath.row]];
[cell addSubview:recipeImageView];
return cell;
}

uicollectionview のセルに画像が表示されません (画像ファイルが存在します)。

助けてくれてありがとう。

4

4 に答える 4

4

registerClass@Adamは正しいです。新しいセルを作成するたびに呼び出さないでください。でも...

ここは何かがおかしい:

UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:[recipePhotos objectAtIndex:indexPath.row]];
[cell addSubview:recipeImageView];

セルにサブビューを要求し、そのサブビューの画像を設定してから、そのサブビューを階層に追加しようとしています...それはすでにどこにありますか?

そのサブビューは存在しますか?いつ作成されますか?おそらくUICollectionViewCell、そのviewDidLoad関数でサブビューをサブクラス化して作成する必要がありますか? 多分このように:

UIImageView *recipeImageView = [UIImageView alloc] init];
recipeImageView.frame = self.contentView.bounds;
[self.contentView addSubview:recipeImageView];
recipeImageView.tag = 100;

次に、あなたcellForItemAtIndexPath:はこれを行います:

UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:[recipePhotos objectAtIndex:indexPath.row]];    

階層に戻す必要はありません。それはすでにそこにあります。

編集:

ああ、Adam は imageView を単にサブビューとしてではなく contentView に追加することについても正しいです。これを反映するようにコードを編集しました。

于 2013-07-08T01:45:35.437 に答える
0

やってはいけない

[gallery1 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:[NSString stringWithFormat:@"c%d",indexPath.row]];

in cellForItemAtIndexPath- クラスを一度登録してから、登録に従ってセルをデキューする必要があります。

プロジェクトに画像はありますか?そうしないと、imageNamed: はそれらを見つけられません。画像がロードされているかどうかを確認しますnil

最後に、(メイン ビューの) サブビューとしてではなくrecipeImageView、セルに を追加してみてください。contentView

于 2013-07-08T01:33:16.887 に答える
0

気をつけて:

やっている:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    UIImageView *imgView = [[UIImageView **alloc**] initWithFrame:CGRectMake(0,0,100,100)];
    imgView.contentMode = UIViewContentModeScaleAspectFit;
    imgView.clipsToBounds = YES;
    imgView.image = [self.imageArray objectAtIndex:indexPath.row];
    [cell **addSubview:imgView**];
    return cell;
}

画像を割り当てています(少し高価でも大丈夫です..)しかし、毎回追加するため、セルを100回使用すると100個のサブビューが追加されます。

于 2014-05-15T12:23:27.010 に答える