macOS开发之NSCollectionView点击代理不回调

2021-01-25  本文已影响0人  chasitu

今天在持续学习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就可以了,这里我不贴代码了,简单说一下思路吧,

如果仔细看过上面代码的小伙伴应该看到了,那个不调用选中回调的设置代码

_collectionView.selectable = YES;//Defaults to NO

没错就是这句话代码,默认是不开启的所以需要手动开启之后代理回调就开始调用了
完成

上一篇下一篇

猜你喜欢

热点阅读