1.在VS中设置C++附加包含目录编辑添加$(EngineRoot)这句话。

2.引入头文件,而不这样写的目的是为了解决安卓找不到tableview。在引入命令空间。

3.实现tableview的功能,首页要共有继承TableViewDataSource和TableViewDelegate两个代理类。

4.实现下面的虚方法

virtualvoidscrollViewDidScroll(cocos2d::extension::ScrollView*view)override{};

virtualvoidscrollViewDidZoom(cocos2d::extension::ScrollView*view)override{}

virtualvoidtableCellTouched(cocos2d::extension::TableView*table,cocos2d::extension::TableViewCell*cell)override;

virtualcocos2d::SizetableCellSizeForIndex(cocos2d::extension::TableView*table,ssize_tidx)override;

virtualcocos2d::extension::TableViewCell*tableCellAtIndex(cocos2d::extension::TableView*table,ssize_tidx)override;

virtualssize_tnumberOfCellsInTableView(cocos2d::extension::TableView*table)override;

5.废话不多说直接上代码

#include"MenuColor.h"

#include"VisibleRect.h"

#include"GlobalDefine.h"

#include"GlobalArray.h"

USING_NS_CC;

MenuColor*MenuColor::create(floatwidth,floatheight)

{

automenucolor=new(std::nothrow)MenuColor();

if(menucolor&&menucolor->init(width,height))

{

menucolor->autorelease();

returnmenucolor;

}

else

{

CC_SAFE_DELETE(menucolor);

returnnullptr;

}

}

boolMenuColor::init(floatwidth,floatheight)

{

if(!LayerColor::initWithColor(Color4B(0,0,0,0),width,height))

{

returnfalse;

}

this->setAnchorPoint(Vec2::ZERO);

_color3b=Color3B(255,0,0);

_cellnum=-100;

//创建tableview

TableView*tableView=TableView::create(this,Size(120*resourceScale,height));

tableView->setDirection(ScrollView::Direction::VERTICAL);

tableView->setPosition(Vec2::ZERO);

tableView->setDelegate(this);

tableView->setDataSource(this);

tableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);

this->addChild(tableView);

tableView->reloadData();

this->setSwallowsTouches(false);

returntrue;

}

voidMenuColor::tableCellTouched(cocos2d::extension::TableView*table,cocos2d::extension::TableViewCell*cell)

{

if(_cellnum>=1)

{

__Stringselect1=StringUtils::format("colorselect_%zd.png",_cellnum+10);

autocell2=(TableViewCell*)table->cellAtIndex(_cellnum-1);

if(cell2!=nullptr)

{

autoframe=getSpriteFrameByName(select1.getCString());

autosp2=Sprite::createWithSpriteFrame(frame);

cell2->removeAllChildren();

cell2->addChild(sp2);

sp2->setAnchorPoint(Vec2::ZERO);

sp2->setPosition(Vec2::ZERO);

sp2->setScale(resourceScale);

frame=getSpriteFrameByName("colorselect.pmg");

autosp=Sprite::createWithSpriteFrame(frame);

sp->setAnchorPoint(Vec2::ZERO);

sp->setPosition(Vec2(0,-4));

sp->setScale(resourceScale);

cell->addChild(sp,4,_cellnum);

_cellnum=(int)cell->getIdx();

}

else

{

autoframe=getSpriteFrameByName("colorselect.pmg");

autosp=Sprite::createWithSpriteFrame(frame);

sp->setAnchorPoint(Vec2::ZERO);

sp->setPosition(Vec2(0,-4));

sp->setScale(resourceScale);

cell->addChild(sp,4,_cellnum);

_cellnum=(int)cell->getIdx()+1;

}

}

else

{

_cellnum=(int)cell->getIdx()+1;

autoframe=getSpriteFrameByName("colorselect.png");

autosp=Sprite::createWithSpriteFrame(frame);

sp->setAnchorPoint(Vec2::ZERO);

sp->setPosition(Vec2(0,-4));

sp->setScale(resourceScale);

cell->addChild(sp,4,_cellnum);

}

intr=colorMap[cell->getIdx()][0];

intg=colorMap[cell->getIdx()][1];

intb=colorMap[cell->getIdx()][2];

_color3b=Color3B(r,g,b);

if(_colorDelegate!=nullptr)

{

_colorDelegate->setColor3B(_color3b);

}

}

SizeMenuColor::tableCellSizeForIndex(cocos2d::extension::TableView*table,ssize_tidx)

{

returnSize(100*resourceScale,110*resourceScale);

}

TableViewCell*MenuColor::tableCellAtIndex(cocos2d::extension::TableView*table,ssize_tidx)

{

autocell=table->cellAtIndex(idx);

autoselect1=StringUtils::format("colorselect_%zd.png",idx+11);

if(!cell)

{

cell=new(std::nothrow)TableViewCell();

cell->autorelease();

autoframe=getSpriteFrameByName(select1.c_str());

autosprite=Sprite::createWithSpriteFrame(frame);

sprite->setAnchorPoint(Vec2::ZERO);

sprite->setPosition(Vec2(4*resourceScale,0));

sprite->setScale(resourceScale);

cell->addChild(sprite);

cell->setTag((int)idx+1);

}

returncell;

}

ssize_tMenuColor::numberOfCellsInTableView(cocos2d::extension::TableView*table)

{

return24;

}

voidMenuColor::setDrawColorDelegate(ColorDelegate*delegate)

{

_colorDelegate=delegate;

}

Color3BMenuColor::getColor3B()

{

return_color3b;

}

但是根据某些需求不想要tableview自带的弹簧效果,可以使用tableView->setBounceable(false);来关闭弹簧效果。但是没有了惯性。重写下面的方法就可以解决这个问题


virtualvoidscrollViewDidScroll(cocos2d::extension::ScrollView*view)override{

//取消弹性

autolayout=view->getContainer();

floatcurrentY=layout->getPositionY();

if(currentY>0)

{

view->setContentOffset(cocos2d::Vec2(0,0));

}

if(-currentY>layout->getContentSize().height-view->getViewSize().height)

{

view->setContentOffset(cocos2d::Vec2(0,-layout->getContentSize().height+view->getViewSize().height));

}

}