UICollectionView 和一个视图控制器中的其他视图

Posted

技术标签:

【中文标题】UICollectionView 和一个视图控制器中的其他视图【英文标题】:UICollectionView and other views in one view controller 【发布时间】:2013-07-26 22:46:18 【问题描述】:

我有一个带有 rootViewController 的 ios 应用程序。在这个视图控制器中有许多不同的视图。现在我想要这个视图中的集合视图。我该怎么做?我试过的是。向情节提要添加了 uicollection 视图,并将数据源和委托设置为新的 uicollectionview 控制器。基本的东西有效。但我无法从 uicollectionview 控制器视图访问 collectionview。 self.collectionview。我是不是忘记了什么?或者有没有更好的方法来处理这个问题?

【问题讨论】:

【参考方案1】:

您应该使用普通视图控制器,而不是集合视图控制器。后者将集合视图作为其***view 属性,因此您在向其添加其他视图方面的灵活性较低。

如果你想要self.collectionView,你需要声明一个属性。不要忘记将它连接到界面生成器(加上委托和数据源)中。

@property (nonatomic, strong) IBOutlet UICollectionView * collectionView; 

当然,您可以对多个集合视图执行相同操作。但是,在您的 UICollectionViewDataSource 和委托方法中,您必须区分两个集合视图并提供它们各自的数据或根据使用的集合视图对用户交互做出反应。

【讨论】:

【参考方案2】:

如果您希望集合视图由您的根视图控制器管理(即其视图层次结构的一部分),那么忘记集合视图控制器并设置集合数据源并委托给您的根视图控制器。然后在根视图控制器类中实现集合视图数据源和委托协议。

【讨论】:

但是如果我添加第二个 uicollectionview 会发生什么? 想必你也更新了你的控制器来管理它吧?听起来您在这一屏幕上做了很多事情,不过……也许您可以多解释一下您的应用程序?【参考方案3】:
@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/

【讨论】:

感谢您发布您的答案!请注意,您应该在此处或此站点上发布答案的基本部分,否则您的帖子可能会被删除See the FAQ where it mentions answers that are 'barely more than a link'. 如果您愿意,您仍然可以包含该链接,但仅作为“参考”。答案应该是独立的,不需要链接。

以上是关于UICollectionView 和一个视图控制器中的其他视图的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 从另一个视图控制器返回时重复单元格

一个 UIViewController 中的两个 UICollectionView

预先创建 UICollectionView 单元格 - 布局问题

带有 UICollectionView 的基础 UIViewController

从 UICollectionView Swift 3 在单独的视图控制器中查看图像

无法从视图控制器访问 UICollectionView 补充视图?