今天在持续学习NSCollectionView
中发现代理didSelectItemsAtIndexPaths
方法不回调,思路还是之前iOS
中一样设置代理,遵守协议,可是就是不调用,接下来我们就解决这个问题,因为之前没有写过NSCollectionView
基本使用相关的文章今天也简单说一下吧
基本使用
第一步:遵守协议<NSCollectionViewDelegateFlowLayout
,NSCollectionViewDataSource
>
第二步:初始化NSCollectionView
_collectionView = [[NSCollectionView alloc] init];
NSCollectionViewFlowLayout *flow = [[NSCollectionViewFlowLayout alloc] init];
flow.itemSize = NSMakeSize(160, 240);
flow.minimumLineSpacing = 30;
flow.minimumInteritemSpacing = 30;
flow.scrollDirection = NSCollectionViewScrollDirectionVertical;
_collectionView.collectionViewLayout = flow;
_collectionView.selectable = YES;//Defaults to NO
_collectionView.delegate = self;
_collectionView.dataSource = self;
[_collectionView registerClass:[SHMyCourseViewItem class] forItemWithIdentifier:@"SHMyCourseViewItem"];
第三步:实现代理,这里就实现几个常用的代理,其它的方法小伙伴们可以按需实现
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView
{
return self.dataSource_Courses.count;
}
- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return [self.dataSource_Courses[section] count];
}
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath{
SHMyCourseViewItem *item = [collectionView makeItemWithIdentifier:@"SHMyCourseViewItem" forIndexPath:indexPath];
item.model = _dataSource_Courses[indexPath.section][indexPath.item];
return item;
}
- (void)collectionView:(NSCollectionView *)collectionView didSelectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
{
SHMainHomeSystemLessonModel *model = _dataSource_Courses[indexPath.section][indexPath.item];
NSLog(@"---didSelect----%@",model.syscourse_name);
}
第四步:自定义NSCollectionViewItem
就可以了,这里我不贴代码了,简单说一下思路吧,
-
NSCollectionViewItem
本身是继承自NSViewController
,所以在- (void)loadView
方法里面初始化控制器的NSView
就可以了 - 剩下的添加控件,约束布局都在
viewDidLoad
里面编写就可以了
如果仔细看过上面代码的小伙伴应该看到了,那个不调用选中回调的设置代码
_collectionView.selectable = YES;//Defaults to NO
没错就是这句话代码,默认是不开启的所以需要手动开启之后代理回调就开始调用了
完成
网友评论