UIViewController维护对UICollectionView的引用。控制器应使用UICollectionViewDelegateFlowLayout修改内置流布局。
将视图的数据源设置为self非常容易:
MyViewController.m
- (void)viewDidLoad
{
self.collectionView.dataSource = self;
}
但是如何将控制器设置为视图的委托流布局?
- (void)viewDidLoad
{
self.collectionView.dataSource= self;
// self.collectionView.??? = self;
}
我试过了:
- (void)viewDidLoad
{
self.collectionView.dataSource= self;
self.collectionView.collectionViewLayout = self;
}
但是我得到了错误:"不兼容的指针类型分配......"。
集合头文件如下所示:
MyViewController.h
@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
答案 0 :(得分:218)
只需self.collectionView.delegate = self;
。请注意,UICollectionViewDelegateFlowLayout
继承自UICollectionViewDelegate
。
我承认一开始会让你措手不及。
哦,这只有在self.collectionView.collectionViewLayout
实际设置为您的流布局时才有效。 (或设置为initWithFrame:collectionViewLayout:
)
答案 1 :(得分:11)
根据以前的答案只是使用的例子。它真的不清楚,但我可以展示它是如何工作的:
@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
答案 2 :(得分:1)
我为 OSX莫哈韦沙漠-斯威夫特
(我已经在这里搜索NSCollectionView ...我知道问题是关于UICollectionView的。)
上述所有内容(指定代表也暗示单元格大小)对于OSX也是正确的。
注意 如果您写:
MyViewController类: NSCollectionViewDelegate, NSCollectionViewDataSource, NSCollectionViewDelegateFlowLayout {
方法:
func collectionView(_ collectionView:NSCollectionView, 布局collectionViewLayout:NSCollectionViewLayout, sizeForItemAt indexPath:IndexPath)-> NSSize
将被呼叫。
如果删除,则不会调用任何委托方法。 (因为课堂不遵守协议)。