1

はじめに、私は iOS 開発の経験がありますが、これが AppStore に公開する最初のアプリであり、UICollectionView を使用した最初の経験でもあります。

これが私のアプリで行っていることの要約です: 複数のフルスクリーン UICollectionViewCells を含むページ化された UICollectionView があります。これらの各セル内には別の UICollectionView ('subCollectionView') があり、現在ラベルが "Test Text" に設定されている UICollectionViewCells ('subCollectionViewCells') が含まれています。2 番目の collectionViewCell までスクロールすると、最初の collectionViewCell の subCollectionViewCells が 2 番目の collectionViewCell の subCollectionView の後ろに表示されます。ここで起こっていることに画像をリンクしました。

subCollectionView を含む CollectionViewCell:

[VLCategoryCollectionViewCell.h]

#import <UIKit/UIKit.h>

@interface VLCategoryCollectionViewCell : UICollectionViewCell

@property (nonatomic, strong) NSString *imageName;
@property (strong, nonatomic) IBOutlet UIView *moduleSubview;

- (void)updateCell;

@end

[VLCategoryCollectionViewCell.m]

#import "VLCategoryCollectionViewCell.h"
#import "VLModuleViewController.h"

@interface VLCategoryCollectionViewCell()

@property (strong, nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) IBOutlet UILabel *categoryName;
@property (strong, nonatomic) VLModuleViewController *moduleViewController;

@end

@implementation VLCategoryCollectionViewCell

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        NSArray *arrayOfViews = [[NSBundle mainBundle]         
loadNibNamed:@"VLCategoryCollectionViewCell" owner:self options:nil];

    if ([arrayOfViews count] < 1) {
        return nil;
    }

    if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]]) {
        return nil;
    }

    self = [arrayOfViews objectAtIndex:0];
}
return self;
}

-(void)updateCell {
_moduleViewController = [[VLModuleViewController alloc] initWithNibName:@"VLModuleViewController" bundle:nil];
_moduleViewController.view.frame = self.moduleSubview.bounds;
[self.moduleSubview addSubview:_moduleViewController.view];

NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Assets"];
NSString *filename = [NSString stringWithFormat:@"%@/%@", sourcePath, self.imageName];

UIImage *image = [UIImage imageWithContentsOfFile:filename];

NSString *fileTitle = [[filename lastPathComponent] stringByDeletingPathExtension];
[self.categoryName setFont:[UIFont fontWithName:@"OpenSans-ExtraBold" size:72.0]];
[self.categoryName setText:fileTitle];
[self.imageView setImage:image];
[self.imageView setContentMode:UIViewContentModeScaleAspectFit];
}

@end

[VLModuleViewController.h]

#import <UIKit/UIKit.h>

@interface VLModuleViewController : UIViewController <UICollectionViewDataSource,     UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>

@end

[VLModuleViewController.m]

#import "VLModuleViewController.h"
#import "VLModuleCollectionViewCell.h"

@interface VLModuleViewController ()

@property (nonatomic, strong) IBOutlet UICollectionView *moduleView;
@property (nonatomic, strong) NSArray *moduleArray;
@property (nonatomic) int currentIndex;
@property (nonatomic) NSString *cellIdentifier;

@end

@implementation VLModuleViewController

- (void)loadView {
[super loadView];

NSArray *moduleArray = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:@"Module_Tests"];
NSMutableArray *moduleImageArray = [[NSMutableArray alloc] initWithCapacity:[moduleArray count]];
for (NSString *path in moduleArray) {
    [moduleImageArray addObject:[UIImage imageWithContentsOfFile:path]];
}

self.moduleArray = [NSArray arrayWithArray:moduleArray];
}

- (void)viewDidLoad {
[super viewDidLoad];
[self setupCollectionView];

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.moduleView setPagingEnabled:YES];
[self.moduleView setCollectionViewLayout:flowLayout];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}

#pragma mark -
#pragma mark UICollectionView methods

- (void)setupCollectionView {
[self.moduleView registerClass:[VLModuleCollectionViewCell class] forCellWithReuseIdentifier:@"VLModuleCollectionViewCell"];

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.moduleView setCollectionViewLayout:flowLayout];
}

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

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [self.moduleArray count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
VLModuleCollectionViewCell *cell = (VLModuleCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"VLModuleCollectionViewCell" forIndexPath:indexPath];
cell.titleLabel.text = @"Module Title Goes Here";
return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(235, 147);
}

@end
4

1 に答える 1

0

collectionView でラベル自体を上書きするという同様の問題がありました。awakeFromNib で updateCell メソッドを呼び出してみてください。これでうまくいきました。

于 2014-07-05T14:50:59.793 に答える