美文网首页MacOS开发
NSCollectionView 的使用

NSCollectionView 的使用

作者: 095b62ead3cd | 来源:发表于2020-01-10 17:17 被阅读0次

在iOS中,我们经常使用到的一个控件有一个UICollectionView,在MacOS开发中,同样有一种类似的控件,叫做NSCollectionView。在使用NSCollectionView的时候,发现有很多地方跟UICollectionView的使用有所不同,这里简单的介绍下NSCollectionView的用法。

  1. 创建
    在往storyboard中拖入NSCollectionView后,观察到其实NSCollectionView并不是直接加载到view上的,而是在外包装了一层NSScrollView,如图所示,


    NSCollectionView在storyboard中的表现
  2. 实现其数据源方法
    这个跟UICollectionView差不多,具体代码如下:
-(NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView{
    return 4;
}

-(NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 20;
}

-(NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath{
    CollectionViewItem *item = [collectionView makeItemWithIdentifier:@"CollectionViewItem" forIndexPath:indexPath];
    if (!item) {
        item = [[CollectionViewItem alloc] initWithNibName:@"CollectionViewItem" bundle:nil];
    }
    return item;
}
  1. 注册item
    可以使用xib创建item,也可以纯代码,注册item代码如下:
    [CollectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:@"CollectionViewItem"];
  1. NSCollectionView设置
    在storyboard中,可以对NSCollectionView进行初始化设置,其中主要的几个属性值如下图所示,包括item大小,布局类型,滚动方向,header大小,最小间距,是否允许选中等等


    具体设置
  2. header设置(footer类似)
    在设置NSCollectionView的header/footer视图的时候,需要先实现NSCollectionView的代理方法:
//返回每组header或footer的视图,具体是哪个,根据kind进行区分
-(NSView *)collectionView:(NSCollectionView *)collectionView viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind atIndexPath:(NSIndexPath *)indexPath{
    HeaderView *headerView = [collectionView makeSupplementaryViewOfKind:NSCollectionElementKindSectionHeader withIdentifier:@"header" forIndexPath:indexPath];
    return headerView;
}

同样,这里还需要进行注册,代码如下:

[self.collectionView registerNib:nib forSupplementaryViewOfKind:NSCollectionElementKindSectionHeader withIdentifier:@"header"];
  1. header的悬停
    NSCollectionView的header悬停也比较简单,需要设置sectionHeadersPinToVisibleBounds属性
NSCollectionViewFlowLayout *layout = self.collectionView.collectionViewLayout;
layout.sectionHeadersPinToVisibleBounds = YES;
  1. item 的选中与取消选中
    在这里需要注意的是,NSCollectionView初始化的时候是默认无法进行选中的,这里需要在storyboard中的初始化界面把NSCollectionView的Selectable属性选中,位置见4,代理方法如下:
//选中item调用的方法
-(void)collectionView:(NSCollectionView *)collectionView didSelectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths{
    NSLog(@"选中了%@",indexPaths);
}

//取消选中调用的方法
-(void)collectionView:(NSCollectionView *)collectionView didDeselectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths{
    NSLog(@"取消选中了%@",indexPaths);
}

注:在点击item进行选中操作的时候,会先调用取消选中的方法,把上次选中的item取消选中

以上是NSCollectionView的简单用法介绍,此处示例使用storyboard加载的方式进行演示,在使用纯代码进行加载的时候需要注意,NSCollectionView外层需包装一层NSScrollView,否则加载不出来,这个地方需要特别注意。

相关文章

网友评论

    本文标题:NSCollectionView 的使用

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