什么是TableView?
这个东西啊,很多游戏,结束后的排行榜,比如里面有20个内容,但是由于窗口受限,不能全部展示,所以像滚动条一样可以纵向(当然也可以横向)拉动的东东。
这个也要和ListView和PageView不一样的,
▪ 与ListView相比
ListView以前我也没用过,网上资料查到的也不多,就讲一下最大的不同吧。
ListView中的每个单元称为item,TableView的每个单元称为cell,如果分别创建20个单元,但每次只能显示5个单元。当ListView创建的时候,会直接创建20个item;而TableView只会创建5个cell,然后在队列中反复利用。这样做的优点就不用多说了吧。
▪ 与PageView相比
我认为的差别在于,我们用TableView的时候,每次滑动,并不会滑动固定的距离,就是说滑动的距离难以固定,而且往往伴随着偏移量,比如手往下一划,当你手离开时候,它还会继续往下划一点(就像有惯性一样)。
而PageView就不同了,如果你往下滑动,比如从编号1滑动到编号3的一半,它会自己判断最后定位到滑到3还是4。就像你翻书一样,不可能翻一半,要么不翻动,要么翻过去。
怎么用TableView?
1.现在要使用的场景中配置好环境,具体方法可以点击链接:开发环境的基本搭建和配置
链接中前半段不用看,后半段讲的才是3.0以后版本怎么使用,首先得添加头文件:
#include "cocos2d.h"
#include "cocos-ext.h"
using namespace std;
USING_NS_CC;
USING_NS_CC_EXT;
之后把添加包含路径。
还有继承类
class HelloWorld : public cocos2d::Layer,TableViewDataSource
{
2.需要重写的函数
// 当滑动tableview时触发该方法 参数为当前的tableview对象
virtual void scrollViewDidScroll(ScrollView* view) {};
// 当tableview被放大或缩小时触发该方法 参数为当前tableview对象
virtual void scrollViewDidZoom(ScrollView* view) {}
// 当cell被点击时调用该方法 参数为当前的tableview对象与被点击的cell对象
virtual void tableCellTouched(TableView* table, TableViewCell* cell);
// 设置tableview的Cell大小
virtual Size tableCellSizeForIndex(TableView *table, ssize_t idx);
// 获取编号为idx的cell
virtual TableViewCell* tableCellAtIndex(TableView *table, ssize_t idx);
// 设置tableview中cell的个数
virtual ssize_t numberOfCellsInTableView(TableView *table);
visibleSize = Director::getInstance()->getVisibleSize();
//创建一个talbleview 将datasource设置为当前的类的对象 tableview的显示区域大小为 300 * 300
TableView* tableView = TableView::create(this, CCSizeMake(300,300));
//设置tableview为水平方向 ScrollView::Direction::VERTICAL 为垂直,ScrollView::Direction::HORIZONTAL 为水平
tableView->setDirection(ScrollView::Direction::VERTICAL);
//设置位置
tableView->setPosition(Vec2(visibleSize.width/2,visibleSize.height/3));
// 填充顺序
tableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);
//添加tableview到当前layer
this->addChild(tableView);
//加载tableview
tableView->reloadData();
Size HelloWorld::cellSizeForTable(TableView *table)
{
return Size(300,50);
}
TableViewCell* HelloWorld::tableCellAtIndex(cocos2d::extension::TableView *table, ssize_t idx)
{
TableViewCell * cell = table->dequeueCell();
Label* label;
if(cell==NULL)
{
cell = TableViewCell::create();
label = Label::create();
label->setTag(2);
label->setSystemFontSize(20);
cell->addChild(label);
}
else
{
label = (Label*)cell->getChildByTag(2);
}
label->setString(StringUtils::format("Label %d",(int)idx));
return cell;
}
ssize_t HelloWorld::numberOfCellsInTableView(TableView *table){
return 100;
}