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