gpt4 book ai didi

ios - `UICollectionViewLayout` 如何访问不可见单元格的数据?

转载 作者:可可西里 更新时间:2023-11-01 03:56:59 25 4
gpt4 key购买 nike

我想从数据源中获取所有数据——包括可见的不可见的单元格——以便计算可见单元格的属性。 collectionView:cellForItemAtIndexPath: 不起作用,因为它为不可见的单元格返回 nil。如 UICollectionView API 中所述:

Return Value

The cell object at the corresponding index path or nil if the cell is not visible or indexPath is out of range.

关于如何在不破坏 MVC 约束的情况下获取底层数据(例如,在布局中存储对数据的引用)的任何想法?

最佳答案

我面临的主要问题是我需要来自底层数据源的信息来设置可见和不可见单元格的属性,以及补充 View 。 UICollectionViewDelegate 协议(protocol)要求单元格在布局属性设置后出队,即使实现类(通常是 UICollectionViewController 可以访问数据源)。

Collection View Programming Guide hints委托(delegate)对象可以扩展以提供附加信息。使用 UICollectionViewDelegateFlowLayout 作为 reference ,我创建了一个新协议(protocol)来声明我需要的数据的方法。然后,我的 UICollectionViewController 子类通过实现这些方法来遵守该协议(protocol),而无需任何布局操作(如出列 View 单元格)。

我的协议(protocol)看起来像这样:

@protocol MyCollectionViewDelegateLayout <UICollectionViewDelegate>
- (CGSize)sizeForCellAtIndexPath:(NSIndexPath *)indexPath;
- (CGSize)sizeForHeaderAtIndexPath:(NSIndexPath *)indexPath;
@end

我的 Collection View Controller 具有以下结构:

@interface MyCollectionViewController : UICollectionViewController
<MyCollectionViewDelegateLayout>
...
@end

@implementation MyCollectionViewController
...
- (CGSize)sizeForCellAtIndexPath:(NSIndexPath *)indexPath
{
// Make calculations based on data at index path.
return CGSizeMake(width, height);
}
- (CGSize)sizeForHeaderAtIndexPath:(NSIndexPath *)indexPath;
{
// Make calculations based on data at index path.
return CGSizeMake(width, height);
}

在我的 UICollectionViewLayout 子类的 prepareLayout 方法中,我调用这些方法来预先计算必要的属性:

@implementation MyCollectionViewLayout
...
- (void)prepareLayout
{
...
// Iterate over sections and rows...
id dataSource = self.collectionView.dataSource;
if ([dataSource respondsToSelector:@selector(sizeForCellAtIndexPath:)]) {
CGSize size = [dataSource sizeForCellAtIndexPath:indexPath];
} else {
// Use default values or calculate size another way
}
...
}
...

使用扩展数据源协议(protocol)允许代码维护 MVC 关注点分离。在这里,布局类仍然不知道有关底层数据的任何信息,但可以使用它来定义属性。相反, Controller 类不会布置任何东西,而只会根据底层数据提供大小调整提示。

关于ios - `UICollectionViewLayout` 如何访问不可见单元格的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com