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图像描述