2016-04-29 5 views
0

Ich habe eine harte Zeit herauszufinden, warum cell.imageview Eigenschaft zeigt mich nicht image unten. UIImage ist nicht Null, Zellen werden erstellt, wenn ich der Zelle einen Hintergrund zuweisen, wird angezeigt, dass ich collectionview und meine Zellen richtig erstellt habe. Ich programmiere programmatisch meine collectionview und verwende keine IB oder interface builder. Ich habe das schon oft gemacht, aber ich kratze mich wirklich mit dem Kopf.Imageview wird nicht in einer programmgesteuerten CollectionView angezeigt

Vielen Dank im Voraus.

@interface MainViewController : UIViewController 

    @property(strong, nonatomic) UICollectionView *collectionView; 

    @end 

    @interface MainViewController()< 
    UICollectionViewDataSource, UICollectionViewDelegate, 
    UICollectionViewDelegateFlowLayout, UIGestureRecognizerDelegate> 

    @property(nonatomic, strong) MHTransitionShowDetail *interactivePushTransition; 
    @property(nonatomic) CGPoint lastPoint; 
    @property(nonatomic) CGFloat startScale; 
    @property(strong, nonatomic) NSMutableArray *carImages; 

    @end 

    @implementation MainViewController 

    - (instancetype)init { 
     self = [super init]; 
     if (self) { 
     } 
     return self; 
    } 

    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 

     _carImages = [@[ 
     @"chevy_small", 
     @"mini_small", 
     @"rover_small", 
     @"smart_small", 
     @"highlander_small", 
     @"venza_small", 
     @"volvo_small", 
     @"vw_small", 
     @"ford_small", 
     @"nissan_small" 
     ] mutableCopy]; 

     self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

     UICollectionViewFlowLayout *layout = 
      [[UICollectionViewFlowLayout alloc] init]; 
     layout.itemSize = CGSizeMake(106, 106); 
     layout.minimumLineSpacing = 1.0; 
     layout.minimumInteritemSpacing = 1.0; 
     self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame 
               collectionViewLayout:layout]; 
     [self.collectionView setDataSource:self]; 
     [self.collectionView setDelegate:self]; 
     self.collectionView.alwaysBounceVertical = YES; 
     [self.collectionView setContentInset:UIEdgeInsetsMake(20, 10, 10, 10)]; 
     [self.collectionView registerClass:[IKGCollectionViewCell class] 
       forCellWithReuseIdentifier:@"myCell"]; 
     self.collectionView.backgroundColor = [UIColor whiteColor]; 
     [self.view addSubview:self.collectionView]; 
    } 

    - (void)didReceiveMemoryWarning { 
     [super didReceiveMemoryWarning]; 
     // Dispose of any resources that can be recreated. 
    } 

    #pragma CollectionView & FlowLayout methods 

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


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

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
         cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
     IKGCollectionViewCell *cell = 
      [collectionView dequeueReusableCellWithReuseIdentifier:@"myCell" 
                forIndexPath:indexPath]; 
     long row = [indexPath row]; 
     UIImage *image = [UIImage imageNamed:self.carImages[row]]; 
     cell.imageView.userInteractionEnabled = YES; 
     cell.imageView.image = image; 
     NSLog(@"cell.image view %@", image); 
     // [self makeCell:(IKGCollectionViewCell *)cell atIndexPath:indexPath]; 

     return cell; 
    } 
} 
@end 

@interface IKGCollectionViewCell : UICollectionViewCell 
@property(nonatomic, strong) UIImageView *imageView; 

@end 


@implementation IKGCollectionViewCell 
- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
    self.imageView = [[UIImageView alloc] initWithFrame:self.bounds]; 
    NSLog(@"self.bounds is %@", NSStringFromCGRect(self.bounds)); 
    } 
    return self; 
} 

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.imageView.frame = self.contentView.bounds; 
} 

@end 

Antwort

2

Sie haben es versäumt, die imageView der Zelle als Unteransicht hinzuzufügen.

So in Zelle initWithFrame

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.imageView = [[UIImageView alloc] initWithFrame:self.bounds]; 
     //Add imageView as subview 
     [self addSubview:self.imageView]; 
     NSLog(@"self.bounds is %@", NSStringFromCGRect(self.bounds)); 
    } 
    return self; 
} 
Verwandte Themen