UICollectionView不出现

我正在尝试在我的视图控制器中以编程方式设置UICollectionView ,它扩展了UIViewController 。 出于某种原因,我的collections观点根本没有出现。 以下是我的。

为什么不出现? 我把它连接到委托和数据源,并将其作为subview添加到self.view 。 我的代码中缺less什么?

在我的.h文件中:

 @interface MainViewController : UIViewController { @private UICollectionView *_collectionView; NSMutableArray *_results; // data source array } @end 

在我的.m文件中:

 @interface MainViewController () <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> @property (nonatomic, retain) UICollectionView *collectionView; @property (nonatomic, retain) NSMutableArray *results; @end @implementation MainViewController @synthesize collectionView = _collectionView; @synthesize results = _results; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // some init stuff - nothing to do with collection view. } return self; } - (void)loadView { self.results = [NSMutableArray array]; UIImage *image1 = [UIImage imageNamed:@"img1.jpg"]; UIImage *image2 = [UIImage imageNamed:@"img2.jpg"]; [self.results addObject:image1]; [self.results addObject:image2]; self.collectionView.dataSource = self; self.collectionView.delegate = self; UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) collectionViewLayout:flowLayout]; self.collectionView = collectionView; [self.view addSubview:self.collectionView]; [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"]; [self.collectionView reloadData]; } - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section { return [self.results count]; } - (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { return 1; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; cell.backgroundColor = [UIColor colorWithPatternImage:[self.results objectAtIndex:indexPath.row]]; return cell; } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { UIImage *image = [self.results objectAtIndex:indexPath.row]; return CGSizeMake(image.size.width, image.size.height); } - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(50, 20, 50, 20); } 

我得到错误,试图运行你的代码,除非我改变了loadView方法viewDidLoad – 根据文档,你不应该直接调用loadView。 为了让数据源和委托方法运行,我将设置委托和数据源的行设置为self,在你设置self.collectionView = collectionView的位置

  self.collectionView = collectionView; self.collectionView.dataSource = self; self.collectionView.delegate = self; 

你的numberOfSectionsInCollectionView:返回0 。 对于一个部分的集合视图,你应该返回1或者只是不实现这个方法。

另外我不能看到你的self.collectionView /初始self.collectionView

我结束了inheritanceUICollectionViewController而不是UIViewController ,并将init方法更改为:

- (id)initWithCollectionViewLayout:(UICollectionViewLayout *)layout

它的工作。

你只需要将你的CollectionView委托和dataSource绑定到StoryBoard中的ViewController。 在这里input图像描述