JSRUN 用代码说话

CAAutoCollectionView(自动化布局容器)

编辑教程

CAAutoCollectionView(自动化布局容器)

类说明:

CAAutoCollectionView同CATableView类似,主要用于数据的展示,实现了tableView的基本功能,同时对tableView拓展,更完美的进行展示数据。

CAAutoCollectionView使用方法

分别使用: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的方法来实现,我们来看看本节的示例代码:


#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 属性说明

CollectionViewDataSource

类型:CAAutoCollectionViewDataSource*

解释:添加数据代理,set/get{}。

CollectionViewDelegate

类型:CAAutoCollectionViewDelegate*

解释:添加交互代理,set/get{}。

CollectionHeaderView

类型:CAView*

解释:添加头部视图,set/get{}。

CollectionFooterView

类型:CAView*

解释:添加尾部视图,set/get{}。

CollectionHeaderHeight

类型:unsigned int

解释:设置头部的高度,set/get{}。

CollectionFooterHeight

类型:unsigned int

解释:设置尾部的高度,set/get{}。

CollectionViewOrientation

类型:CACollectionViewOrientation

解释:CollectionView方向取向,set/get{}。

CollectionViewCellHoriAlign

类型:CACollectionViewCellHoriAlign

解释:CollectionView的Cell水平对齐,set/get{}。

CollectionViewCellVertAlign

类型:CACollectionViewCellVertAlign

解释:CollectionView的Cell垂直对齐,set/get{}。

HoriCellInterval

类型:unsigned int

解释:cell水平间隔,set/get{}。

VertCellInterval

类型:unsigned int

解释:cell垂直间隔,set/get{}。

HoriMargins

类型:unsigned int

解释:水平边距,set/get{}。

VertMargins

类型:unsigned int

解释:垂直边距,set/get{}。

AllowsSelection

类型:bool

解释:允许选择,is{}。

AllowsMultipleSelection

类型:bool

解释:允许多个选择,is{}。

AlwaysTopSectionHeader

类型:bool

解释:总是顶部的标题,is/set{}。

AlwaysBottomSectionFooter

类型: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

virtual bool init();

返回值:bool

参数:

解释:初始化

void reloadData();

返回值: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模式

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟