美文网首页
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