请选择 进入手机版 | 继续访问电脑版
查看: 12085|回复: 1

[教程] [无脑码农CrossApp笔记]CACollectionView容器列表

[复制链接]
最佳答案
0 
无脑码农 发表于 2015-7-17 10:23:38 | 显示全部楼层 |阅读模式
无标题.png
CACollectionView同CATableView类似,主要用于数据的展示,实现了tableView的基本功能,同时对tableView拓展,更完美的进行展示数据。
CACollectionView的使用方法和CATableView比较类似,我们也要分别使用:CACollectionView、CACollectionViewCell、CACollectionViewDelegate、CACollectionViewDataSource来构建。
CACollectionView是表格视图的容器,是容器的载体。
CACollectionViewCell是表格视图的一个单元(本节后面简称cell)。
CACollectionViewDelegate是交互代理,响应cell选中和取消状态。
CACollectionViewDataSource是数据代理,设置Selection个数及Selection包含cell个数。
先详细的看一下CACollectionView的常用函数
函数        说明
void setCollectionHeaderView(CAView* var)        添加头部视图
void setCollectionFooterView(CAView* var)        添加尾部视图
void setCollectionHeaderHeight(unsigned int var)        设置头部视图的高度
void setCollectionFooterHeight(unsigned int var)        设置尾部视图的高度
unsigned int setHoriInterval(unsigned int var)        item间的水平间隔
unsigned int setVertInterval (unsigned int var)        item间的竖直间隔
void setAllowsSelection(bool var)        是否开启cell选择
void setAllowsMultipleSelection(bool var)        是否可以多选cell
        section头部是否停留在顶部
        section尾部是否停留在底部
Void setTableViewDelegate(CATableViewDelegate* var)        添加交互代理
Void setTableViewDataSource(CATableViewDataSource* var)        添加数据代理
void reloadData()        刷新CATableView的数据
void setSelectAtIndex(unsigned int index)        根据索引设置cell为选中状态
CATableViewCell* dequeueReusableCellWithIdentifier(const char* reuseIdentifier)        从复用队列中寻找指定标识符的cell
我们再了解一下CACollectionViewDelegate:
函数        说明
virtual void collectionViewDidSelectRowAtIndexPath (CACollectionView * collectionView, unsigned int section, unsigned int item)        选中cell时调用
virtual void collectionViewDidDeselectRowAtIndexPath (CACollectionView * collectionView, unsigned int section, unsigned int item)        取消选择cell时调用
CACollectionDataSource:
函数        说明
virtual CACollectionViewCell* collectionCellAtIndex(CACollectionView *collectionView,const CCSize& cellSize, unsigned int section, unsigned int row, unsigned int item)        获取指定cell
virtual unsigned int numberOfRowsInSection (CACollectionView *collectionView, unsigned int section)        获取对应的section所包含的cell个数
virtual unsigned int numberOfSections (CACollectionView *collectionView)        获取tableview包含的section个数
virtual unsigned int collectionViewHeightForHeaderInSection(CACollectionView *collectionView, unsigned int section)        每个section的headerView
virtual unsigned int collectionViewHeightForFooterInSection(CACollectionView *collectionView, unsigned int section)        每个section的footerView
virtual CAView* collectionViewSectionViewForHeaderInSection(CACollectionView *collectionView, const CCSize& viewSize, unsigned int section)        headerView的内容
virtual CAView* collectionViewSectionViewForFooterInSection(CACollectionView *collectionView, const CCSize& viewSize, unsigned int section)        footerView的内容
virtual unsigned int numberOfItemsInRowsInSection(CACollectionView *collectionView, unsigned int section, unsigned int row)        每个cell里的item数量
virtual unsigned int collectionViewHeightForRowAtIndexPath(CACollectionView* collectionView, unsigned int section, unsigned int row)        cell的高度
我们本机的示例,不再使用自定义的CACollectionViewCell的方法来实现,我们来看看本节的示例代码:
FirstViewController.h内容:
  1. #ifndef __HelloCpp__ViewController__
  2. #define __HelloCpp__ViewController__

  3. #include <iostream>
  4. #include "CrossApp.h"

  5. USING_NS_CC;

  6. class FirstViewController : public CAViewController, CACollectionViewDelegate, CACollectionViewDataSource
  7. {
  8.    
  9. public:

  10.         FirstViewController();
  11.    
  12.         virtual ~FirstViewController();
  13.    
  14. protected:
  15.    
  16.     void viewDidLoad();
  17.    
  18.     void viewDidUnload();

  19. public:
  20.         //选中item时调用
  21.         virtual void collectionViewDidSelectCellAtIndexPath(CACollectionView *collectionView, unsigned int section, unsigned int row, unsigned int item);
  22.         //取消item是调用
  23.         virtual void collectionViewDidDeselectCellAtIndexPath(CACollectionView *collectionView, unsigned int section, unsigned int row, unsigned int item);

  24.         //获取指定cell
  25.         virtual CACollectionViewCell* collectionCellAtIndex(CACollectionView *collectionView, const CCSize& cellSize, unsigned int section, unsigned int row, unsigned int item);
  26.         //section的个数
  27.         virtual unsigned int numberOfSections(CACollectionView *collectionView);
  28.         //section中的cell个数
  29.         virtual unsigned int numberOfRowsInSection(CACollectionView *collectionView, unsigned int section);
  30.         //每个cell中Item的个数
  31.         virtual unsigned int numberOfItemsInRowsInSection(CACollectionView *collectionView, unsigned int section, unsigned int row);
  32.         //cell的高度
  33.         virtual unsigned int collectionViewHeightForRowAtIndexPath(CACollectionView* collectionView, unsigned int section, unsigned int row);

  34. private:
  35.         //用于获得屏幕的size
  36.         CADipSize size;
  37.         //CACollectionView
  38.         CACollectionView* p_Conllection;
  39.         //颜色容器
  40.         std::vector<CAColor4B> colorArr;
  41. };


  42. #endif /* defined(__HelloCpp__ViewController__) */
复制代码
FirstViewController.cpp内容:
  1. #include "FirstViewController.h"

  2. FirstViewController::FirstViewController()
  3. {

  4. }

  5. FirstViewController::~FirstViewController()
  6. {

  7. }

  8. void FirstViewController::viewDidLoad()
  9. {
  10.     //获得屏幕大小
  11.         size = this->getView()->getBounds().size;

  12.         //随机出颜色
  13.         for (int i = 0; i < 40; i++)
  14.         {
  15.                 char r = CCRANDOM_0_1() * 255;
  16.                 char g = CCRANDOM_0_1() * 255;
  17.                 char b = CCRANDOM_0_1() * 255;
  18.                 //将随机的ccc4对象放入到容器里
  19.                 colorArr.push_back(ccc4(r, g, b, 255));
  20.         }
  21.         //生成CACollectionView
  22.         p_Conllection = CACollectionView::createWithFrame(this->getView()->getBounds());
  23.         //开启选中
  24.         p_Conllection->setAllowsSelection(true);
  25.         //开启多选
  26.         p_Conllection->setAllowsMultipleSelection(true);
  27.         //绑定交互代理
  28.         p_Conllection->setCollectionViewDelegate(this);
  29.         //绑定数据代理
  30.         p_Conllection->setCollectionViewDataSource(this);
  31.         //item水平间的距离
  32.         p_Conllection->setHoriInterval(_px(40));
  33.         //itme竖直间的距离
  34.         p_Conllection->setVertInterval(_px(40));
  35.         //添加到屏幕渲染
  36.         this->getView()->addSubview(p_Conllection);
  37. }

  38. void FirstViewController::viewDidUnload()
  39. {
  40.     // Release any retained subviews of the main view.
  41.     // e.g. self.myOutlet = nil;
  42. }

  43. void FirstViewController::collectionViewDidSelectCellAtIndexPath(CACollectionView *collectionView, unsigned int section, unsigned int row, unsigned int item)
  44. {
  45.         //选中
  46.         CCLog(UTF8("选中"));
  47. }

  48. void FirstViewController::collectionViewDidDeselectCellAtIndexPath(CACollectionView *collectionView, unsigned int section, unsigned int row, unsigned int item)
  49. {
  50.         //取消选中
  51.         CCLog(UTF8("取消选中"));
  52. }

  53. CACollectionViewCell* FirstViewController::collectionCellAtIndex(CACollectionView *collectionView, const CCSize& cellSize, unsigned int section, unsigned int row, unsigned int item)
  54. {
  55.         //计算 如果cell个数大于颜色数组,则返回空
  56.         if (row * 3 + item >= colorArr.size())
  57.         {
  58.                 return NULL;
  59.         }

  60.         //获得
  61.         CADipSize _size = cellSize;
  62.         //根据标识获得CACollectionViewCell
  63.         CACollectionViewCell* p_Cell = collectionView->dequeueReusableCellWithIdentifier("CrossApp");
  64.         //如果没有找到相应的CACollectionViewCell则新建一个
  65.         if (p_Cell == NULL)
  66.         {
  67.                 p_Cell = CACollectionViewCell::create("CrossApp");
  68.                 //生成Item背景
  69.                 CAView* itemImage = CAView::createWithFrame(CADipRect(0, 0, _size.width, _size.height));
  70.                 itemImage->setTag(99);
  71.                 p_Cell->addSubview(itemImage);
  72.                 CADipSize itemSize = itemImage->getBounds().size;
  73.                 //生成itemCALabel
  74.                 CALabel* itemText = CALabel::createWithCenter(CADipRect(itemSize.width*0.5, itemSize.height*0.5, 150, 40));
  75.                 itemText->setTag(100);
  76.                 itemText->setFontSize(_px(29));
  77.                 itemText->setTextAlignment(CATextAlignmentCenter);
  78.                 itemText->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
  79.                 itemImage->addSubview(itemText);
  80.         }
  81.         //设置Item背景颜色
  82.         CAView* itemImageView = p_Cell->getSubviewByTag(99);
  83.         itemImageView->setColor(colorArr.at(row * 3 + item));
  84.         CCLog("%d", row * 3 + item);

  85.         //设置itme文本显示
  86.         char pos[20] = "";
  87.         sprintf(pos, "(%d,%d,%d)", section, row, item);
  88.         CALabel* itemText = (CALabel*)p_Cell->getSubviewByTag(99)->getSubviewByTag(100);
  89.         itemText->setText(pos);

  90.         return p_Cell;
  91. }

  92. unsigned int FirstViewController::numberOfSections(CACollectionView *collectionView)
  93. {
  94.         return 1;
  95. }

  96. unsigned int FirstViewController::numberOfRowsInSection(CACollectionView *collectionView, unsigned int section)
  97. {
  98.         return colorArr.size() % 3 == 0 ? colorArr.size() / 3 : colorArr.size() / 3 + 1;
  99. }

  100. unsigned int FirstViewController::numberOfItemsInRowsInSection(CACollectionView *collectionView, unsigned int section, unsigned int row)
  101. {
  102.         return 3;
  103. }

  104. unsigned int FirstViewController::collectionViewHeightForRowAtIndexPath(CACollectionView* collectionView, unsigned int section, unsigned int row)
  105. {
  106.         return (this->getView()->getBounds().size.width - _px(40) * 4) / 3;
  107. }
复制代码
这样我们就创建了一个多彩的CACollectionView.
无标题.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

推荐阅读 More>

© 2001-2015 9秒社团

合作伙伴

公司简介 | 联系方式
COPYRIGHT©2015 ZHONGQINGLONGTU NETWORK CO.LTD ALL RIGHTS RESERVED.ICP备11023195号-4
北京中清龙图网络技术有限公司
返回顶部 返回列表