类说明:
CAAutoCollectionView同CATableView类似,主要用于数据的展示,实现了tableView的基本功能,同时对tableView拓展,更完美的进行展示数据。
CAAutoCollectionView的使用方法和CATableView比较类似,我们也要分别使用:CAAutoCollectionView、CACollectionViewCell、CAAutoCollectionViewDelegate、CAAutoCollectionViewDataSource来构建。
CAAutoCollectionView是表格视图的容器,是容器的载体。
CACollectionViewCell是表格视图的一个单元(本节后面简称cell)。
CAAutoCollectionViewDelegate是交互代理,响应cell选中和取消状态。
CAAutoCollectionViewDataSource是数据代理,设置Selection个数及Selection包含Item个数。
CAAutoCollectionView 属性(点击查看方法介绍)
| 属性 | 说明 | 
| CollectionViewDataSource | 添加数据代理 | 
| CollectionViewDelegate | 添加交互代理 | 
| CollectionHeaderView | 添加头部视图 | 
| CollectionFooterView | 添加尾部视图 | 
| CollectionHeaderHeight | 设置头部的高度 | 
| CollectionFooterHeight | 设置尾部的高度 | 
| CollectionViewOrientation | CollectionView方向取向 | 
| CollectionViewCellHoriAlign | CollectionView的Cell水平对齐 | 
| CollectionViewCellVertAlign | CollectionView的Cell垂直对齐 | 
| HoriCellInterval | cell水平间隔 | 
| VertCellInterval | cell垂直间隔 | 
| HoriMargins | 水平边距 | 
| VertMargins | 垂直边距 | 
| AllowsSelection | 允许选择 | 
| AllowsMultipleSelection | 允许多个选择 | 
| AlwaysTopSectionHeader | 总是顶部的标题 | 
| AlwaysBottomSectionFooter | 总是底部的节尾 | 
CAAutoCollectionView 方法(点击查看方法介绍)
| 说明 | 说明 | 
| createWithFrame | 创建,并指定其Frame | 
| createWithCenter | 创建,并指定Color | 
| init | 初始化 | 
| reloadData | 重载数据 | 
| dequeueReusableCellWithIdentifier | 从复用队列中寻找指定标识符的cell | 
| setAllowsSelection | 是否开启cell选择 | 
| setAllowsMultipleSelection | 是否可以多选cell | 
| setSelectRowAtIndexPath | 通过索引选择一行 | 
| setUnSelectRowAtIndexPath | 通过索引取消选择一行 | 
| setShowsScrollIndicators | 设置显示滚动指示器 | 
| cellForRowAtIndexPath | 根据索引获取显示的cell | 
| displayingCollectionCell | 显示CollectionCell | 
| getHighlightCollectionCell | 获取高亮显示的collectioncell | 
| switchPCMode | 开关PC模式 | 
我们本机的示例,不再使用自定义的CACollectionViewCell的方法来实现,我们来看看本节的示例代码:
FirstViewController.h内容:
#ifndef __HelloCpp__ViewController__
#define __HelloCpp__ViewController__
#include <iostream>
#include "CrossApp.h"
USING_NS_CC;
class FirstViewController : public CAViewController, CAAutoCollectionViewDataSource, CAAutoCollectionViewDelegate
{
     
protected:
    void viewDidLoad();
     
    void viewDidUnload();
     
public:
FirstViewController();
     
virtual ~FirstViewController();
     
    //选中
    virtual void collectionViewDidSelectCellAtIndexPath(CAAutoCollectionView *collectionView, unsigned int section, unsigned int item);
     
    //取消选中
    virtual void collectionViewDidDeselectCellAtIndexPath(CAAutoCollectionView *collectionView, unsigned int section, unsigned int item);
     
    //获取指定cell
    virtual CACollectionViewCell* collectionCellAtIndex(CAAutoCollectionView *collectionView, const DSize& cellSize, unsigned int section, unsigned int item);
     
    //项目大小
    virtual DSize collectionViewSizeForItemAtIndexPath(CAAutoCollectionView* collectionView, unsigned int section, unsigned int item);
     
    //每个Section中Item的个数
    virtual unsigned int numberOfItemsInSection(CAAutoCollectionView *collectionView, unsigned int section);
     
    //section的个数
    virtual unsigned int numberOfSections(CAAutoCollectionView *collectionView);
     
private:
    DSize size;
     
    CAAutoCollectionView* p_AutoCollection;
     
    std::vector<CAColor4B> colorArr;
         
};
 
 
#endif /* defined(__HelloCpp__ViewController__) */
FirstViewController.cpp内容:
#include "FirstViewController.h"
FirstViewController::FirstViewController()
{
}
FirstViewController::~FirstViewController()
{
}
void FirstViewController::viewDidLoad()
{
    //获得屏幕大小
    size = this->getView()->getBounds().size;
     
    //随机出颜色
    for (int i = 0; i < 40; i++)
    {
        char r = CCRANDOM_0_1() * 255;
        char g = CCRANDOM_0_1() * 255;
        char b = CCRANDOM_0_1() * 255;
         
        //将随机的ccc4对象放入到容器里
        colorArr.push_back(ccc4(r, g, b, 255));
    }
     
    //生成CACollectionView
    p_AutoCollection = CAAutoCollectionView::createWithFrame(this->getView()->getBounds());
    DRect rect = this->getView()->getBounds();
    CCLog("MaxX = %f", rect.getMaxX());
    CCLog("MaxX = %f", rect.getMaxY());
     
    //开启选中
    p_AutoCollection->setAllowsSelection(true);
     
    //开启多选
    p_AutoCollection->setAllowsMultipleSelection(true);
     
    //绑定交互代理
    p_AutoCollection->setCollectionViewDelegate(this);
     
    //绑定数据代理
    p_AutoCollection->setCollectionViewDataSource(this);
     
     
    //item水平间的距离
    p_AutoCollection->setHoriMargins(40);
    p_AutoCollection->setHoriCellInterval(40);
     
    //p_AutoCollection->setCollectionHeaderHeight(40);
     
    //itme竖直间的距离
    p_AutoCollection->setVertMargins(40);
    p_AutoCollection->setVertCellInterval(40);
     
    //p_AutoCollection->setCollectionFooterHeight(40);
     
    //添加到屏幕渲染
    this->getView()->addSubview(p_AutoCollection);
     
}
void FirstViewController::viewDidUnload()
{
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
//选中
void FirstViewController::collectionViewDidSelectCellAtIndexPath(CAAutoCollectionView *collectionView, unsigned int section, unsigned int item)
{
    //选中
    CCLog("选中");
}
//取消选中
void FirstViewController::collectionViewDidDeselectCellAtIndexPath(CAAutoCollectionView *collectionView, unsigned int section, unsigned int item)
{
    //取消选中
    CCLog("取消选中");
}
//获取指定cell
CACollectionViewCell* FirstViewController::collectionCellAtIndex(CAAutoCollectionView *collectionView, const DSize& cellSize, unsigned int section, unsigned int item)
{
    //根据标识获得CACollectionViewCell
    CACollectionViewCell* p_Cell = collectionView->dequeueReusableCellWithIdentifier("CrossApp");
    //如果没有找到相应的CACollectionViewCell则新建一个
    if (p_Cell == NULL)
    {
        p_Cell = CACollectionViewCell::create("CrossApp");
         
        //生成Item背景
        CAView* itemImage = CAView::createWithFrame(DRect(0, 0, cellSize.width, cellSize.height));
        itemImage->setTag(99);
        p_Cell->addSubview(itemImage);
        DSize itemSize = itemImage->getBounds().size;
         
        //生成itemCALabel
        CALabel* itemText = CALabel::createWithCenter(DRect(itemSize.width*0.5, itemSize.height*0.5, 150, 40));
        itemText->setTag(100);
        itemText->setFontSize(29);
        itemText->setTextAlignment(CATextAlignmentCenter);
        itemText->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
        itemImage->addSubview(itemText);
    }
     
    //设置Item背景颜色
    CAView* itemImageView = p_Cell->getSubviewByTag(99);
    itemImageView->setColor(colorArr.at(item));
    CCLog("row = %d", item);
     
    //设置itme文本显示
    char pos[20] = "";
    sprintf(pos, "(%d,%d)", section, item);
    CALabel* itemText = (CALabel*)p_Cell->getSubviewByTag(99)->getSubviewByTag(100);
    itemText->setText(pos);
    return  p_Cell;
}
//项目大小
DSize FirstViewController::collectionViewSizeForItemAtIndexPath(CAAutoCollectionView* collectionView, unsigned int section, unsigned int item)
{
    DSize size;
    size.width = (this->getView()->getBounds().size.width - 40 * 4) / 3;
    size.height = (this->getView()->getBounds().size.width - 40 * 4) / 3;
    return size;
}
//每个Section中Item的个数
unsigned int FirstViewController::numberOfItemsInSection(CAAutoCollectionView *collectionView, unsigned int section)
{
    return 15;
}
//section的个数
unsigned int FirstViewController::numberOfSections(CAAutoCollectionView *collectionView)
{
    return 10;
}
CAAutoCollectionView 属性说明
类型:CAAutoCollectionViewDataSource*
解释:添加数据代理,set/get{}。
类型:CAAutoCollectionViewDelegate*
解释:添加交互代理,set/get{}。
类型:CAView*
解释:添加头部视图,set/get{}。
类型:CAView*
解释:添加尾部视图,set/get{}。
类型:unsigned int
解释:设置头部的高度,set/get{}。
类型:unsigned int
解释:设置尾部的高度,set/get{}。
类型:CACollectionViewOrientation
解释:CollectionView方向取向,set/get{}。
类型:CACollectionViewCellHoriAlign
解释:CollectionView的Cell水平对齐,set/get{}。
类型:CACollectionViewCellVertAlign
解释:CollectionView的Cell垂直对齐,set/get{}。
类型:unsigned int
解释:cell水平间隔,set/get{}。
类型:unsigned int
解释:cell垂直间隔,set/get{}。
类型:unsigned int
解释:水平边距,set/get{}。
类型:unsigned int
解释:垂直边距,set/get{}。
类型:bool
解释:允许选择,is{}。
类型:bool
解释:允许多个选择,is{}。
类型:bool
解释:总是顶部的标题,is/set{}。
类型:bool
解释:总是底部的节尾,is/set{}。
CAAutoCollectionView 方法说明
static CAAutoCollectionView* createWithFrame(const DRect& rect);
返回值:CAAutoCollectionView*
参数:
| 类型 | 参数名 | 说明 | 
| const DRect& | rect | 区域大小 | 
解释:创建,并指定其Frame
static CAAutoCollectionView* createWithCenter(const DRect& rect);
返回值:CAAutoCollectionView*
参数:
| 类型 | 参数名 | 说明 | 
| const DRect& | rect | 中心点的位置及大小 | 
解释:创建,并指定Color
返回值:bool
参数:
解释:初始化
返回值:void
参数:
解释:重载数据
CACollectionViewCell* dequeueReusableCellWithIdentifier(const char* reuseIdentifier);
返回值:CACollectionViewCell*
参数:
| 类型 | 参数名 | 说明 | 
| const char* | reuseIdentifier | 重载标识符 | 
解释:从复用队列中寻找指定标识符的cell
virtual void setAllowsSelection(bool var);
返回值:void
参数:
| 类型 | 参数名 | 说明 | 
| bool | var | 是否开启 | 
解释:是否开启cell选择
virtual void setAllowsMultipleSelection(bool var);
返回值:void
参数:
| 类型 | 参数名 | 说明 | 
| bool | var | 是否开启 | 
解释:是否可以多选cell
void setSelectRowAtIndexPath(unsigned int section, unsigned int item);
返回值:void
参数:
| 类型 | 参数名 | 说明 | 
| unsigned int | section | section | 
| unsigned int | item | 项目数量 | 
解释:通过索引选择一行
void setUnSelectRowAtIndexPath(unsigned int section, unsigned int item);
返回值:void
参数:
| 类型 | 参数名 | 说明 | 
| unsigned int | section | section | 
| unsigned int | item | 项目数量 | 
解释:通过索引取消选择一行
virtual void setShowsScrollIndicators(bool var);
返回值:void
参数:
| 类型 | 参数名 | 说明 | 
| bool | var | 是否开启 | 
解释:设置显示滚动指示器
CACollectionViewCell* cellForRowAtIndexPath(unsigned int section, unsigned int row, unsigned int item);
返回值:CACollectionViewCell*
参数:
| 类型 | 参数名 | 说明 | 
| unsigned int | section | section | 
| unsigned int | row | 行 | 
| unsigned int | item | 项目数量 | 
解释:根据索引获取显示的cell
const CAVector<CACollectionViewCell*>& displayingCollectionCell();
返回值:CAVector<CACollectionViewCell*>&
参数:
解释:显示CollectionCell
CACollectionViewCell* getHighlightCollectionCell();
返回值:CACollectionViewCell*
参数:
解释:获取高亮显示的collectioncell
virtual void switchPCMode(bool var);
返回值:void
参数:
| 类型 | 参数名 | 说明 | 
| bool | var | 是否开启 | 
解释:开关PC模式