【问题标题】:How do I add two CollectionViews on one Viewcontroller? [closed]如何在一个 Viewcontroller 上添加两个 CollectionView? [关闭]
【发布时间】:2013-08-24 15:17:26
【问题描述】:

最终结果是在一个视图控制器上拥有 2 个集合视图。来自不同来源的拉动以及一个应该水平滚动而另一个垂直滚动。

请告知如何以编程方式实现这一目标。

【问题讨论】:

    标签: ios uiviewcontroller uicollectionview


    【解决方案1】:

    我之前没有使用过UICollectionView,但由于它继承自 UIScrollView,我想它与UITableView 非常相似。

    当使用一个 CollectionView 时,我假设您必须设置 collectionView.delegate = self;collectionView.dataSource = self,并在 .h 文件中,确保您的班级使用 <UICollectionViewDelegate, UICollectionViewDataSource> 或类似的东西。当您将 collectionView 的委托设置为您自己的视图 (self) 时,您要确保为 collectionView 提供的数据来自您自己的类,在委托方法中。我相信您已经知道这一点,因为使用一个 collectionView 应该非常简单。

    当你使用两个collectionViews时,你必须设置

    collection1.delegate = self;
    collection2.delegate = self;
    collection1.dataSource = self;
    collection2.dataSource = self;
    

    这会反过来让两个 collectionView 都调用委托方法。 例如,委托方法-collectionView:cellForItemAtIndexPath: 将被调用两次。一次用于collection1,一次用于collection2。

    为确保他们收到发送给他们的正确数据,您应该在每个委托和 dataSource 方法的开头创建一个简单的检查,如下所示:

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        if(collectionView == collection1)
        {
            //return cell for collection1
        }
        else
        {
            //return cell for collection2
        }
    }
    

    在这里,我正在检查collectionView 是否等于collection1collection2。委托方法提供collectionView 作为它调用该方法的 UICollectionView,并且必须是两者之一。但是,如果您为 collectionView 调用了您的 collectionView 之一,这可能看起来很可疑,因此请务必按逻辑命名它们。

    【讨论】:

    • 不过,您可能希望将 if(collectionView == collection1) 更改为 if ([collectionView isEqual:collection1]) 以正确测试相等性。
    • 不,== 是正确的(你正在测试两个指针是否指向同一个东西)
    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多