0

我正在尝试将补充页脚添加到UICollectionView. 根据Apple的文档,我似乎正在使用所有正确的方法,但由于某种原因:

- (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没有打印任何内容,但是我不知道为什么。

我有需要以编程方式完成这一切的限制(没有故事板)。

谢谢!

4

2 回答 2

0

我建议你调试和检查。调试在任何 IDE 中都是一个非常强大的工具,并且在大多数情况下都能提供帮助。
我认为你没有做的是设置你的对象的datasourcedelegate属性。UICollectionView

所以,试试:

self.collectionView.datasource = self;
self.collectionView.delegate = self;
于 2013-09-05T04:29:00.103 回答
0

发现了问题。

我正在继承 UICollectionViewFlowLayout 并错误地调用:

layoutAttributesForSupplementaryViewOfKind:atIndexPath

正确地在所述子类中。需要在以下位置调用此方法:

layoutAttributesForElementsInRect:

然后属性传递到一个可变数组中。

根据我对这里文件的理解。尽管在我的视图控制器中创建和出列页脚的方法是 UICollectionViewDataSource 协议的一部分,但数据源首先检查 UICollectionViewFlowLayout 以查看需要创建哪些对象。

于 2013-09-06T13:08:34.313 回答