我正在尝试将补充页脚添加到UICollectionView
中。根据苹果的文档,我似乎找到了所有正确的方法,但出于某种原因:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
根本没有接到电话。
我已经将UICollectionReusableView
子类化为一个名为SmartActionFooterView
的类。
在ViewController
中,在ViewDidLoad
方法中,我注册视图并将其与重用标识符相关联,例如:
[self.collectionView registerClass:[SmartActionFooterView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerView"];
然后用…重写UICollectionFlowDelegate
方法。。。
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
referenceSizeForFooterInSection:(NSInteger)section
{
NSLog(@"sizing footer");
return CGSizeMake(300,100);
}
这个NSLog
正在打印出来。
然后我使用UICollectionViewDataSource
方法。。。
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Something is happening with the footer...");
SmartActionFooterView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerView" forIndexPath:indexPath];
footerView.backgroundColor = [UIColor yellowColor];
return footerView;
}
然而,这个NSLog
什么都没打印,但我不知道为什么。
我有一个限制,那就是需要通过编程来完成这一切(没有故事板)。
谢谢!
我建议您进行调试和检查。调试在任何IDE中都是一个非常强大的工具,它在大多数情况下都有帮助
我认为您还没有设置UICollectionView
对象的datasource
和delegate
属性。
所以,试试:
self.collectionView.datasource = self;
self.collectionView.delegate = self;
发现问题。
我正在对UICollectionViewFlowLayout进行子类化,并错误地调用:
layoutAttributesForSupplementaryViewOfKind:atIndexPath
适当地在所述子类中。此方法的调用需要在:中完成
layoutAttributesForElementsInRect:
然后将属性传递到一个可变数组中。
根据我对这里文件的理解。尽管在我的视图控制器中创建和退出页脚的方法是UICollectionViewDataSource协议的一部分,但数据源首先与UICollectionViewFlowLayout进行检查,以查看需要创建哪些对象。