Mac开发-NSCollectionView自定义使用

简介

相比于UICollectionViewNSCollectionView可以实现的功能都一样,主要是使用方式上注意点很多,这里推荐使用xib来自定义NSCollectionViewNSCollectionViewItem,因为我们知道在mac开发中,滑动视图需要添加NSClipViewNSScrollerView上,并添加NSScroller才能正常使用,加大了开发难度,xib拖拽会帮我们做好这些工作。

值得注意的是大部分实用的接口在MacOS10.11后才可用,版本适配需要注意

delegate

NSCollectionViewDelegate负责视图的动作代理,例如拖拽,点击操作
我们一般只需要实现点击回调

//点击事件
- (void)collectionView:(NSCollectionView *)collectionView didSelectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths

dataSource

NSCollectionViewDataSource是NSCollectionView中重要的部分,决定视图是否显示的关键。
一般需要实现的代理如下:

//返回section中item数量
- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section NS_AVAILABLE_MAC(10_11);
//返回item的view视图,类型为NSCollectionViewItem
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_MAC(10_11);
//section的数量,不实现此代理则默认为1
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView NS_AVAILABLE_MAC(10_11);
// 返回section的视图,类型为NSView
- (NSView *)collectionView:(NSCollectionView *)collectionView viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind atIndexPath:(NSIndexPath *)indexPath;

collectionViewLayout

collectionViewLayout布局layout对象,当使用xib布局时,xib会默认给我们设置,我们也同时可以在xib中设置相关的值。
在这里插入图片描述
同样也可以代码设置,然后赋值给collectionViewLayout

NSCollectionViewDelegateFlowLayout

流式布局时我们可以通过代理方法实时改变item,header,footer的大小,和相关的行间距,item间距以及EdgeInsets

//实时改变item大小
- (NSSize)collectionView:(NSCollectionView *)collectionView layout:(NSCollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
- (NSEdgeInsets)collectionView:(NSCollectionView *)collectionView layout:(NSCollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
- (CGFloat)collectionView:(NSCollectionView *)collectionView layout:(NSColle
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值