首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何设置UICollectionViewDelegateFlowLayout?

如何设置UICollectionViewDelegateFlowLayout?
EN

Stack Overflow用户
提问于 2012-10-17 08:08:26
回答 4查看 84.5K关注 0票数 117

UIViewController维护对UICollectionView的引用。控制器应该使用UICollectionViewDelegateFlowLayout修改内置的流布局。

将视图的数据源设置为self非常容易:

MyViewController.m

代码语言:javascript
复制
- (void)viewDidLoad
{
    self.collectionView.dataSource = self;
}

但是如何将控制器设置为视图的委托流布局呢?

代码语言:javascript
复制
- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    // self.collectionView.??? = self; 
}

我试过了:

代码语言:javascript
复制
- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    self.collectionView.collectionViewLayout = self; 
}

但是我得到了错误:“不兼容的指针类型赋值...”。

收集头文件如下所示:

MyViewController.h

代码语言:javascript
复制
@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-17 08:38:57

只有self.collectionView.delegate = self;。请注意,UICollectionViewDelegateFlowLayout继承自UICollectionViewDelegate

我承认一开始让我猝不及防。

哦,这只有在self.collectionView.collectionViewLayout实际设置为您的流布局时才会起作用。(或使用initWithFrame:collectionViewLayout:设置)

票数 285
EN

Stack Overflow用户

发布于 2016-04-06 21:06:28

根据前面的回答,只是使用的例子。它真的不清楚,但我可以展示它是如何工作的:

代码语言:javascript
复制
@interface PrettyViewController()<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>
    //some code
@end

@implementation PrettyViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.collectionView.delegate = self;//bingo! right here
}

#pragma mark - UICollectionViewDelegateFlowLayout

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
    return CGSizeMake([[UIScreen mainScreen] bounds].size.width, 20.0);
}


@end
票数 15
EN

Stack Overflow用户

发布于 2019-07-29 18:21:50

我对macOS Mojave - Swift的两点看法

(我跌倒在这里寻找NSCollectionView...我只知道问题是关于UICollectionView的。)

上述所有内容(指定委托也意味着单元格大小)对于macOS也是正确的。

注意:如果你写:

代码语言:javascript
复制
class MyViewController:
    NSCollectionViewDelegate,
    NSCollectionViewDataSource,
    **NSCollectionViewDelegateFlowLayout** 
{

方法:

代码语言:javascript
复制
func collectionView(_ collectionView: NSCollectionView, 
                      layout collectionViewLayout: NSCollectionViewLayout, 
               sizeForItemAt indexPath: IndexPath) -> NSSize

将被调用为

如果移除,则不会调用任何委托方法。(因为类不遵守协议)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12925280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档