在iOS中,我们经常使用到的一个控件有一个UICollectionView,在MacOS开发中,同样有一种类似的控件,叫做NSCollectionView。在使用NSCollectionView的时候,发现有很多地方跟UICollectionView的使用有所不同,这里简单的介绍下NSCollectionView的用法。
-
创建
在往storyboard中拖入NSCollectionView后,观察到其实NSCollectionView并不是直接加载到view上的,而是在外包装了一层NSScrollView,如图所示,
NSCollectionView在storyboard中的表现 - 实现其数据源方法
这个跟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;
}
- 注册item
可以使用xib创建item,也可以纯代码,注册item代码如下:
[CollectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:@"CollectionViewItem"];
-
NSCollectionView设置
在storyboard中,可以对NSCollectionView进行初始化设置,其中主要的几个属性值如下图所示,包括item大小,布局类型,滚动方向,header大小,最小间距,是否允许选中等等
具体设置 - 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"];
- header的悬停
NSCollectionView的header悬停也比较简单,需要设置sectionHeadersPinToVisibleBounds属性
NSCollectionViewFlowLayout *layout = self.collectionView.collectionViewLayout;
layout.sectionHeadersPinToVisibleBounds = YES;
- 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,否则加载不出来,这个地方需要特别注意。
网友评论