美文网首页
macOS开发之NSCollectionView点击代理不回调

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

作者: chasitu | 来源:发表于2021-01-25 12:01 被阅读0次

今天在持续学习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

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

相关文章

网友评论

      本文标题:macOS开发之NSCollectionView点击代理不回调

      本文链接:https://www.haomeiwen.com/subject/bfvbzktx.html