2016-12-07 63 views
0

我決定選擇不使用Xib來生成我自定義的UICollectionViewCellStoneCell),所以我一直在努力如何以編程方式正確初始化它。如何在沒有Nib的情況下以編程方式初始化UICollectionViewCell

我實現:在我UICollectionView控制器

[self.collectionView registerClass:[StoneCell class] forCellWithReuseIdentifier:@"stoneCell"]; 

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    CGSize size = [MainScreen screen]; 
    CGFloat width = size.width; 
    CGFloat item = (width*60)/320; 
    return CGSizeMake(item, item); 
} 

以及。

在我StoneCell.m,我試過如下:

-(id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     StoneCell* stone = [[StoneCell alloc] initWithFrame:frame]; 
     self = stone; 
    } 
    return self; 
} 

,但無濟於事。當我建立並運行時,我崩潰在self = [super initWithFrame:frame];當我檢查幀的值時,它正確設置在{{0,0},{70,70}}這是它應該在6s上。但是,對象stone(以及self)都報告爲nil

很顯然,這是不正確的,所以我想知道如何正確初始化的單元格。

我也是正常出隊的單元格:

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

所以這照顧。

+0

你有沒有繼承你的UICollectionViewCell StoneCell? – Miknash

+0

是的,肯定是的。 –

+0

愚蠢的問題,你確認你正確地設置你的數據源並正確地委託CollectionView?另外,如果你在故事板上有一個原型單元格,然後告訴該原型單元格它是StoneCell類,那麼你可以考慮在你的collectionview中添加一個原型單元格。 – Acludia

回答

0

你的初始化應該是

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    return self; 
} 

與您最初的實現

-(id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     StoneCell* stone = [[StoneCell alloc] initWithFrame:frame]; 
     self = stone; 
    } 
    return self; 
} 

你有initWithFrame無限遞歸。

0

//在AMAImageViewCell.h

#import <UIKit/UIKit.h> 

@interface AMAImageViewCell : UICollectionViewCell 

@property (strong, readonly, nonatomic) UIImageView *imageView; 

@end 

//在AMAImageViewCell.m

@implementation AMAImageViewCell 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     _imageView = [[UIImageView alloc] initWithFrame:self.contentView.bounds]; 

     _imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
     _imageView.clipsToBounds = YES; 
     _imageView.contentMode = UIViewContentModeScaleAspectFill; 

     _imageView.layer.cornerRadius = 0.0; 

     [self.contentView addSubview:_imageView]; 
    } 
    return self; 
} 


@end 

/******在你必須使用*******類***/

[self.collectionView registerClass:[AMAImageViewCell class] forCellWithReuseIdentifier:ImageCellIdentifier]; 

//在cellForItemAtIndexPath

AMAImageViewCell *cell = [collectionViewLocal dequeueReusableCellWithReuseIdentifier:ImageCellIdentifier 
                    forIndexPath:indexPath]; 
相關問題