【问题标题】:CollectionView datasource method called with incorrect CollectionView argument使用不正确的 CollectionView 参数调用 CollectionView 数据源方法
【发布时间】:2016-02-24 06:00:08
【问题描述】:

我有两个集合视图作为自定义视图的属性作为属性。所以我们称他们为self.collViewAself.collViewB。在实现数据源方法时,我使用 if 语句来配置具有正确信息的正确集合视图。我只是使用isEqual: 来检查每个数据源回调的collectionView 参数。这适用于除sizeForItemAtIndexPath 之外的每个数据源回调。

我的实现如下:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

   if ([collectionView isEqual:self.collViewA]) {
            return CGSizeMake(25,25);
   }
   if ([collectionView isEqual:self.collViewB]) {
      return CGSizeMake(50,50);
   }
   return CGSizeMake(10,10);
}

问题似乎是当两个集合视图都在我的设置方法中实例化时(在初始化作为这些集合视图的超级的自定义视图之后调用),只有第二个 if 语句通过并且两个集合视图都有 50,50大小的细胞。如果我删除实例化第二个集合视图的代码,那么第一个如果将通过,我将获得 25,25 个大小的单元格用于正确的视图,但显然没有第二个集合视图。

我不明白的是,我如何在所有其他回调中使用与 isEqual: 相同的条件逻辑并且没有任何问题。

【问题讨论】:

    标签: objective-c uicollectionview uikit


    【解决方案1】:

    你可以使用标签来解决这个问题

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    
       if (collectionView.tag == 1) {
                return CGSizeMake(25,25);
       }
       if (collectionView.tag == 2) {
          return CGSizeMake(50,50);
       }
       return CGSizeMake(10,10);
    }
    

    【讨论】:

    • 我发现这有点骇人听闻,因为显然包含 collectionView 参数只是为了让用户可以区分不同的。 fwiw,我通过为每个集合视图使用两个单独的 UICollectionViewFlowLayout 来让它工作。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多