我有一个带有rootViewController的iOS应用程序。在此视图控制器中有许多不同的视图。现在我想要在这个视图中的集合视图。我该怎么做?我试过的是。在故事板中添加了一个uicollection视图,并将数据源和委托设置为新的uicollectionview控制器。基本的东西工作。但是我无法从uicollectionview控制器视图访问collectionview。 self.collectionview。我忘记了什么吗?或者有更好的方法来处理这个问题吗?
答案 0 :(得分:2)
您应该使用普通视图控制器,而不是集合视图控制器。后者将集合视图作为其顶级view
属性,因此您在向其添加其他视图方面的灵活性较低。
如果您需要self.collectionView
,则需要声明属性。不要忘记在界面构建器(以及委托和数据源)中将其挂钩。
@property (nonatomic, strong) IBOutlet UICollectionView * collectionView;
当然,您可以对多个集合视图执行相同操作。但是,在UICollectionViewDataSource
和委托方法中,您必须区分两个集合视图并根据使用的集合视图提供各自的数据或对用户交互作出反应。
答案 1 :(得分:0)
如果希望集合视图由根视图控制器(即其视图层次结构的一部分)管理,则忘记集合视图控制器并设置集合数据源并委托给根视图控制器。然后在根视图控制器类中实现集合视图数据源和委托协议。
答案 2 :(得分:0)
@interface ViewController ()
@property (nonatomic, strong) IBOutlet UICollectionView *collectionView;
@end
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UINib *cellNib = [UINib nibWithNibName:@"NibCell" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"cvCell"];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setItemSize:CGSizeMake(200, 200)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.collectionView setCollectionViewLayout:flowLayout];
在cellForItemAtIndexPath中..它应该是下面的东西..
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
NSMutableArray *data = [self.dataArray objectAtIndex:indexPath.section];
NSString *cellData = [data objectAtIndex:indexPath.row];
static NSString *cellIdentifier = @"cvCell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
UILabel *titleLabel = (UILabel *)[cell viewWithTag:100];
[titleLabel setText:cellData];
return cell;
}
参考以下文章,很好地解释。 http://adoptioncurve.net/archives/2012/09/a-simple-uicollectionview-tutorial/