Mac BCCollectionView的使用(一)

         项目中需要显示很多影视的信息,类似图片墙那种结构,每个影视信息对应一个Cell。考虑到效率的问题,这种Cell必须能够复用。刚开始考虑使用NSTableView,但是当拉伸窗体时,需要动态的拉伸添加和删除列,非常的费劲。最后看苹果官方关于NSTableView的例子时,发现了NSCollectionView这个控件,查询NSCollectionView这种控件的用法时,发现了BCCollectionView这种控件。 据说当展示大量的数据时,BCCollectionView比苹果官方的NSCollectionView效率高很多。

         下面介绍这个控件的使用方式:

1. 创建BCCollectionView

BCCollectionView *collectionView = [[BCCollectionView alloc] initWithFrame:frame];
collectionView.delegate = self;

NSScrollView *scrollview = [[NSScrollView alloc] initWithFrame:frame];
[scrollview setHasVerticalScroller:YES];
[scrollview setAutohidesScrollers:YES];

[scrollview setDocumentView:collectionView];

[self addSubview:scrollview positioned:NSWindowAbove relativeTo:nil];

2. 加载数据

    NSArray *dataSource = [[[NSArray alloc] initWithObjects:@"data1", @"data2", @"data3", @"data3", nil] autorelease];
    [collectionView reloadDataWithItems:dataSource emptyCaches:YES];
          定义数据源,然后调用函数reloadDataWithItems加载数据。

3. 实现回调

          当调用BCCollectionView的函数reloadDataWithItems后,BCCollectionViewDelegate中定义的回调会被调用。

          下面一次说明常用的每个回调用法:

          3.1 返回每个Cell的大小

            - (NSSize)cellSizeForCollectionView:(BCCollectionView *)collectionView
            {
                return NSMakeSize(158, 140);
            }

           3.2 创建一个Cell,可以在这个回调中对Cell进行初始化

            - (NSViewController *)reusableViewControllerForCollectionView:(BCCollectionView *)collectionView
            {
                CellViewController *viewController = [[[CellViewController alloc] init] autorelease];
                // 这里可以对viewController进行一个初始化
                return viewController;
            }

            3.3 当Cell将来显示出来时,设置数据

            - (void)collectionView:(BCCollectionView *)collectionView willShowViewController(NSViewController *)viewController forItem:(id)anItem 
            {
                CellViewController *cellViewController = (CellViewController *)viewController;
                // cellViewController将会显示出来,这里需要对cellViewController设置要显示出来的数据。
            }
                            这里的viewController是将要显示出来的Cell, anItem是dataSource里面的一项。

             3.4 当一个Cell不可见时,释放其里面的资源

            - (void)collectionView:(BCCollectionView *)collectionView viewControllerBecameInvisible:(NSViewController *)viewController{
                
                CellViewController *cell = (CellViewController*)viewController;
                // 这里可以释放cell里面的一些资源
            }
              3.5 实现一个Cell的点击事件

            - (void)collectionView:(BCCollectionView *)collectionView didClickItem:(id)anItem withViewController:(NSViewController *)viewController {
                // 这里可以实现针对点击时间的一些处理
            }

               3.6 另外两个用到的回调,可以自己试试效果

            - (BOOL)collectionViewShouldDrawSelections:(BCCollectionView *)collectionView {
                return NO;
            }
            
            - (BOOL)collectionViewShouldDrawHover:(BCCollectionView *)collectionView {
                return NO;
            }
                文中出现的CellViewController是自己实现的Cell。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值