5.8TableView可以上下滚动

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;
    };//可不写


//根据下标值获取每个子项
    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;

    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 ;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值