TableView表格视图,它的风格和ListView很像,TableView由ScrollView派生而来
Cocos2d-x之TableView和ScrollView的混合使用:
我们可以左右滑动界面,也可以上下滑动界面,左右滑动的时候不能上下滑动,上下滑动的时候不能左右滑动。这种效果可以用TableView和ScrollView来组合实现,即先弄一个ScrollView,然后把2个TableView当作内容放入这个ScrollView中就可以了
http://cn.cocos2d-x.org/tutorial/show?id=2252
Cocos2d-x 3.0 超级马里奥开发笔记(一) -- loadingbar、TableView和pageview的使用
allocate
/'æləkeɪt/
分配;指定
TableViewDataSource是TableView的一个委托,在资源的
加载和
更新以及
设置子项数量上都需要使用它
TableViewDataSource:
//获取给定下标值的子项大小
virtual Size tableCellSizeForIndex(TableView *table, ssize_t idx) {
return cellSizeForTable(table);
};
virtual Size cellSizeForTable(TableView *table) {
return Size::ZERO;
return Size::ZERO;
};//可不写
//根据下标值获取每个子项
virtual TableViewCell* tableCellAtIndex(TableView *table, ssize_t idx);
//子项的个数
virtual ssize_t numberOfCellsInTableView(TableView *table);
TableViewDelegate :
public
ScrollViewDelegate
//用户点击后离开屏幕时响应
virtual
void
tableCellTouched(
TableView
* table,
TableViewCell
* cell)
;
//用户点击按下某个子项时响应,可用来更改cell按下状态时的图片
virtual
void
tableCellHighlight(
TableView
* table,
TableViewCell
* cell);
//用户点击从某个子项上抬起时响应
virtual
void
tableCellUnhighlight(
TableView
* table,
TableViewCell
* cell);
//子项被回收时响应
virtual
void
tableCellWillRecycle(
TableView
* table,
TableViewCell
* cell);
完整代码(TableView可以上下滚动)
:
#include
"cocos-ext.h"
//******
USING_NS_CC_EXT
;
//******
class
HelloWorld :
public
cocos2d
::
Layer
,
public
TableViewDelegate
,
public
TableViewDataSource
//
视图滚动时响应
virtual void scrollViewDidScroll( ScrollView * view);
// 视图缩放时响应
virtual void scrollViewDidZoom( ScrollView * view);
//TableViewDelegate : public ScrollViewDelegate
// 用户点击后离开屏幕时响应
virtual void tableCellTouched( TableView * table, TableViewCell * cell);
// 用户点击按下某个子项时响应,可用来更改 cell 按下状态时的图片
virtual void tableCellHighlight( TableView * table, TableViewCell * cell);
// 用户点击从某个子项上抬起时响应
virtual void tableCellUnhighlight( TableView * table, TableViewCell * cell);
// 子项被回收时响应
virtual void tableCellWillRecycle( TableView * table, TableViewCell * cell);
//TableViewDataSource:
// 获取给定下标值的子项大小
virtual Size tableCellSizeForIndex( TableView *table, ssize_t idx);
// 根据下标值获取每个子项
virtual TableViewCell * tableCellAtIndex( TableView *table, ssize_t idx);
// 子项的个数
virtual ssize_t numberOfCellsInTableView( TableView *table);
private :
Size size;
virtual void scrollViewDidScroll( ScrollView * view);
// 视图缩放时响应
virtual void scrollViewDidZoom( ScrollView * view);
//TableViewDelegate : public ScrollViewDelegate
// 用户点击后离开屏幕时响应
virtual void tableCellTouched( TableView * table, TableViewCell * cell);
// 用户点击按下某个子项时响应,可用来更改 cell 按下状态时的图片
virtual void tableCellHighlight( TableView * table, TableViewCell * cell);
// 用户点击从某个子项上抬起时响应
virtual void tableCellUnhighlight( TableView * table, TableViewCell * cell);
// 子项被回收时响应
virtual void tableCellWillRecycle( TableView * table, TableViewCell * cell);
//TableViewDataSource:
// 获取给定下标值的子项大小
virtual Size tableCellSizeForIndex( TableView *table, ssize_t idx);
// 根据下标值获取每个子项
virtual TableViewCell * tableCellAtIndex( TableView *table, ssize_t idx);
// 子项的个数
virtual ssize_t numberOfCellsInTableView( TableView *table);
private :
Size size;
Label* txt;//
点击显示
cell
的
index
#include
"cocos-ext.h"
//******
USING_NS_CC_EXT
;
//******
size
=
Director
::
getInstance
()->
getWinSize
();
txt = Label :: createWithTTF ( "index: " , "fonts/Marker Felt.ttf" , 20 );
txt -> setPosition ( Vec2 ( size . width * 0.2 , size . height * 0.9 ));
addChild ( txt );
// 创建表格视图,这个宽 130 为 cell 中图片资源的宽,如果想全屏可滑动,设置屏幕宽即可
// TableView* tableView =TableView::create(cocos2d::extension::TableViewDataSource *dataSource, cocos2d::Size size);
auto tableView = TableView :: create ( this , Size ( 130 , size . height ));
tableView-> setDelegate ( this );
tableView-> setPosition ( Vec2 ( size . width / 2 - 65 , 0 ));
// 方向竖直
// tableView->setDirection(TableView::Direction::VERTICAL);
tableView-> setDirection ( ScrollView :: Direction :: VERTICAL );
addChild (tableView);
// 设置表格视图填充子项的排列顺序 自顶往下
// tableView->setVerticalFillOrder(cocos2d::extension::TableView::VerticalFillOrder order);
tableView-> setVerticalFillOrder ( TableView :: VerticalFillOrder :: TOP_DOWN );
// 重新加载数据
tableView-> reloadData ();
return true ;
}
// 视图滚动时响应
void HelloWorld ::scrollViewDidScroll( ScrollView * view){
CCLOG ( "scroll" );
}
// 视图缩放时响应
void HelloWorld ::scrollViewDidZoom( ScrollView * view){
// 本文未实现这个功能
CCLOG ( "zoom" );
}
// 调用的先后顺序为: tableCellHighlight 、 tableCellUnhighlight 、 tableCellTouched
//TableViewDelegate : public ScrollViewDelegate
// 用户点击后离开屏幕时响应
void HelloWorld ::tableCellTouched( TableView * table, TableViewCell * cell){
txt -> setString ( __String :: createWithFormat ( "index: %zi" ,cell-> getIdx ())-> getCString ());
}
// 用户点击按下某个子项时响应,可用来更改 cell 按下状态时的图片
void HelloWorld ::tableCellHighlight( TableView * table, TableViewCell * cell){
auto texture = Director :: getInstance ()-> getTextureCache ()-> addImage ( "btn-play-selected.png" );
auto sp = ( Sprite *)cell-> getChildByTag ( 100 ); //************
sp-> setTexture (texture);
}
// 用户点击从某个子项上抬起时响应
void HelloWorld ::tableCellUnhighlight( TableView * table, TableViewCell * cell){
auto texture = Director :: getInstance ()-> getTextureCache ()-> addImage ( "btn-play-normal.png" );
auto sp = ( Sprite *)cell-> getChildByTag ( 100 ); //************
sp-> setTexture (texture);
}
// 子项被回收时响应
void HelloWorld ::tableCellWillRecycle( TableView * table, TableViewCell * cell){
CCLOG ( "cell willRecycle ai index: %zd" ,cell-> getIdx ());
}
//TableViewDataSource:
// 获取给定下标值的子项大小
Size HelloWorld ::tableCellSizeForIndex( TableView *table, ssize_t idx){
return Size ( 130 , 50 );
}
// 根据下标值获取每个子项
TableViewCell * HelloWorld ::tableCellAtIndex( TableView *table, ssize_t idx){
auto string = __String :: createWithFormat ( "%zd" ,idx);
TableViewCell * cell = table-> dequeueCell ();
if (!cell) {
// 添加每个 cell 的内容
cell = new TableViewCell ();
cell-> autorelease ();
auto sprite = Sprite :: create ( "btn-play-normal.png" );
sprite-> setAnchorPoint ( Vec2 :: ZERO );
sprite-> setPosition ( Vec2 :: ZERO );
sprite-> setTag ( 100 );
cell-> addChild (sprite);
auto label = Label :: createWithTTF (string-> getCString (), "fonts/Marker Felt.ttf" , 20 ); //*****
label-> setAnchorPoint ( Vec2 :: ZERO );
label-> setPosition ( Vec2 ( 20 , 20 ));
label-> setTag ( 200 );
cell-> addChild (label);
} else {
auto label = ( Label *)cell-> getChildByTag ( 200 );
label-> setString (string-> getCString ());
}
return cell;
}
// 子项的个数
ssize_t HelloWorld ::numberOfCellsInTableView( TableView *table){
return 20 ;
}
txt = Label :: createWithTTF ( "index: " , "fonts/Marker Felt.ttf" , 20 );
txt -> setPosition ( Vec2 ( size . width * 0.2 , size . height * 0.9 ));
addChild ( txt );
// 创建表格视图,这个宽 130 为 cell 中图片资源的宽,如果想全屏可滑动,设置屏幕宽即可
// TableView* tableView =TableView::create(cocos2d::extension::TableViewDataSource *dataSource, cocos2d::Size size);
auto tableView = TableView :: create ( this , Size ( 130 , size . height ));
tableView-> setDelegate ( this );
tableView-> setPosition ( Vec2 ( size . width / 2 - 65 , 0 ));
// 方向竖直
// tableView->setDirection(TableView::Direction::VERTICAL);
tableView-> setDirection ( ScrollView :: Direction :: VERTICAL );
addChild (tableView);
// 设置表格视图填充子项的排列顺序 自顶往下
// tableView->setVerticalFillOrder(cocos2d::extension::TableView::VerticalFillOrder order);
tableView-> setVerticalFillOrder ( TableView :: VerticalFillOrder :: TOP_DOWN );
// 重新加载数据
tableView-> reloadData ();
return true ;
}
// 视图滚动时响应
void HelloWorld ::scrollViewDidScroll( ScrollView * view){
CCLOG ( "scroll" );
}
// 视图缩放时响应
void HelloWorld ::scrollViewDidZoom( ScrollView * view){
// 本文未实现这个功能
CCLOG ( "zoom" );
}
// 调用的先后顺序为: tableCellHighlight 、 tableCellUnhighlight 、 tableCellTouched
//TableViewDelegate : public ScrollViewDelegate
// 用户点击后离开屏幕时响应
void HelloWorld ::tableCellTouched( TableView * table, TableViewCell * cell){
txt -> setString ( __String :: createWithFormat ( "index: %zi" ,cell-> getIdx ())-> getCString ());
}
// 用户点击按下某个子项时响应,可用来更改 cell 按下状态时的图片
void HelloWorld ::tableCellHighlight( TableView * table, TableViewCell * cell){
auto texture = Director :: getInstance ()-> getTextureCache ()-> addImage ( "btn-play-selected.png" );
auto sp = ( Sprite *)cell-> getChildByTag ( 100 ); //************
sp-> setTexture (texture);
}
// 用户点击从某个子项上抬起时响应
void HelloWorld ::tableCellUnhighlight( TableView * table, TableViewCell * cell){
auto texture = Director :: getInstance ()-> getTextureCache ()-> addImage ( "btn-play-normal.png" );
auto sp = ( Sprite *)cell-> getChildByTag ( 100 ); //************
sp-> setTexture (texture);
}
// 子项被回收时响应
void HelloWorld ::tableCellWillRecycle( TableView * table, TableViewCell * cell){
CCLOG ( "cell willRecycle ai index: %zd" ,cell-> getIdx ());
}
//TableViewDataSource:
// 获取给定下标值的子项大小
Size HelloWorld ::tableCellSizeForIndex( TableView *table, ssize_t idx){
return Size ( 130 , 50 );
}
// 根据下标值获取每个子项
TableViewCell * HelloWorld ::tableCellAtIndex( TableView *table, ssize_t idx){
auto string = __String :: createWithFormat ( "%zd" ,idx);
TableViewCell * cell = table-> dequeueCell ();
if (!cell) {
// 添加每个 cell 的内容
cell = new TableViewCell ();
cell-> autorelease ();
auto sprite = Sprite :: create ( "btn-play-normal.png" );
sprite-> setAnchorPoint ( Vec2 :: ZERO );
sprite-> setPosition ( Vec2 :: ZERO );
sprite-> setTag ( 100 );
cell-> addChild (sprite);
auto label = Label :: createWithTTF (string-> getCString (), "fonts/Marker Felt.ttf" , 20 ); //*****
label-> setAnchorPoint ( Vec2 :: ZERO );
label-> setPosition ( Vec2 ( 20 , 20 ));
label-> setTag ( 200 );
cell-> addChild (label);
} else {
auto label = ( Label *)cell-> getChildByTag ( 200 );
label-> setString (string-> getCString ());
}
return cell;
}
// 子项的个数
ssize_t HelloWorld ::numberOfCellsInTableView( TableView *table){
return 20 ;
}