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>
发布于 2012-10-17 08:38:57
只有self.collectionView.delegate = self;
。请注意,UICollectionViewDelegateFlowLayout
继承自UICollectionViewDelegate
。
我承认一开始让我猝不及防。
哦,这只有在self.collectionView.collectionViewLayout
实际设置为您的流布局时才会起作用。(或使用initWithFrame:collectionViewLayout:
设置)
发布于 2016-04-06 21:06:28
根据前面的回答,只是使用的例子。它真的不清楚,但我可以展示它是如何工作的:
@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
发布于 2019-07-29 18:21:50
我对macOS Mojave - Swift的两点看法
(我跌倒在这里寻找NSCollectionView
...我只知道问题是关于UICollectionView
的。)
上述所有内容(指定委托也意味着单元格大小)对于macOS也是正确的。
注意:如果你写:
class MyViewController:
NSCollectionViewDelegate,
NSCollectionViewDataSource,
**NSCollectionViewDelegateFlowLayout**
{
方法:
func collectionView(_ collectionView: NSCollectionView,
layout collectionViewLayout: NSCollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> NSSize
将被调用为。
如果移除,则不会调用任何委托方法。(因为类不遵守协议)。
https://stackoverflow.com/questions/12925280
复制相似问题