【Cocos2d-X】TableView的使用
在Cocos2d-x使用TableView的过程如下:
- 首先用一个类继承CCTableViewDelegate(代理)和CCTableViewDataSource(数据源);
- 然后实现里面的有关tableView操作和内容的四个抽象方法;
- 最后就可以在场景类中通过CCTableView来使用这个类,CCTableView会分别设置代理对象和数据源对象
示例:
TableView.h
#ifndef _TABELVIEW_H_
#define _TABLEVIEW_H_
#include "cocos2d.h"
#include "cocos-ext.h"
using namespace cocos2d;
class TableView : public cocos2d::extension::CCTableViewDelegate,
public cocos2d::extension::CCTableViewDataSource{
public:
//================
//需实现的方法
//================
//处理触摸事件
virtual void tableCellTouched(cocos2d::extension::CCTableView* table,
cocos2d::extension::CCTableViewCell* cell);
//每一项的宽度和高度
virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);
//生成列表每一项的内容
unsigned int idx);
//一共多少项
virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);
//================
//可忽略的方法
//================
//继承自scrollView所需要的方法,可以空函数体忽略
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view){}
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view){}
};
#endif
TableView.cpp
#include "TableView.h"
//每个单元格选项的大小
CCSize TableView::cellSizeForTable(extension::CCTableView *table){
return CCSizeMake(480, 320);
}
//单个选项的显示
extension::CCTableViewCell* TableView::tableCellAtIndex(extension::CCTableView *table, unsigned int idx){
extension::CCTableViewCell *cell = table->dequeueCell();
if (!cell) {
// the sprite
cell = new extension::CCTableViewCell();
cell->autorelease();
CCSprite *sprite = CCSprite::create("HelloWorld.png");
sprite->setAnchorPoint(ccp(0, 0));
sprite->setPosition(ccp(0, 30));
cell->addChild(sprite);
}
return cell;
}
//选项个数
unsigned int TableView::numberOfCellsInTableView(extension::CCTableView *table){
return 5;
}
//点击单元格选项的响应事件
void TableView::tableCellTouched(extension::CCTableView* table, extension::CCTableViewCell* cell){
char s[20];
sprintf(s, "the cell is %d", cell->getIdx());
CCMessageBox(s, "对话框");
}
在HelloWorld::init方法里的使用TableView的部分代码:
//创建一个自己的TableView
TableView* tv = new TableView();
//此处的tv绑定的是数据源
cocos2d::extension::CCTableView *tableView =
cocos2d::extension::CCTableView::create(tv, CCSizeMake(480, 320));
//横向排列
tableView->setDirection(cocos2d::extension::kCCScrollViewDirectionHorizontal);
//放在屏幕中央
tableView->setPosition(ccp(visibleSize.width / 2 - 240, visibleSize.height / 2 - 160));
//此处的tv是代理
tableView->setDelegate(tv);
tableView->setVerticalFillOrder(cocos2d::extension::kCCTableViewFillTopDown);
this->addChild(tableView);
tableView->reloadData();
效果图:
点击某一图片后: