5.8TableView可以上下滚动

来源:互联网 发布:七天网络教师阅卷平台 编辑:程序博客网 时间:2024/05/03 16:38
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的使用

http://cn.cocos2d-x.org/tutorial/show?id=1354
allocate/'æləkeɪt/ 分配;指定

TableViewDataSource是TableView的一个委托,在资源的加载更新以及设置子项数量上都需要使用它
TableViewDataSource:
//获取给定下标值的子项大小
   virtual Size tableCellSizeForIndex(TableView*table,ssize_t idx) {
        returncellSizeForTable(table);

    };

   virtual Size cellSizeForTable(TableView*table) {
       
return Size::ZERO;
    };//可不写


//根据下标值获取每个子项
    virtualTableViewCell* tableCellAtIndex(TableView*table,ssize_t idx);
//子项的个数
   virtual ssize_t numberOfCellsInTableView(TableView*table);



TableViewDelegate : public ScrollViewDelegate
//用户点击后离开屏幕时响应
virtualvoidtableCellTouched(TableView* table,TableViewCell* cell);
//用户点击按下某个子项时响应,可用来更改cell按下状态时的图片
virtualvoidtableCellHighlight(TableView* table,TableViewCell* cell);
//用户点击从某个子项上抬起时响应
virtualvoidtableCellUnhighlight(TableView* table,TableViewCell* cell);
//子项被回收时响应
virtualvoidtableCellWillRecycle(TableView* table,TableViewCell* cell);


完整代码(TableView可以上下滚动)
#include"cocos-ext.h"//******
USING_NS_CC_EXT;//******
classHelloWorld : public cocos2d::Layer,publicTableViewDelegate,publicTableViewDataSource




    //视图滚动时响应
   
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;//点击显示cellindex


#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);
  
    
    
//创建表格视图,这个宽130cell中图片资源的宽,如果想全屏可滑动,设置屏幕宽即可
//    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;
}

//视图滚动时响应
voidHelloWorld::scrollViewDidScroll(ScrollView* view){

   
CCLOG("scroll");
   
}
//视图缩放时响应
voidHelloWorld::scrollViewDidZoom(ScrollView* view){
//本文未实现这个功能
   
CCLOG("zoom");
}



//调用的先后顺序为:tableCellHighlighttableCellUnhighlighttableCellTouched
//TableViewDelegate : public ScrollViewDelegate
//用户点击后离开屏幕时响应
voidHelloWorld::tableCellTouched(TableView* table, TableViewCell* cell){

   
txt->setString(__String::createWithFormat("index:  %zi",cell->getIdx())->getCString());

}

//用户点击按下某个子项时响应,可用来更改cell按下状态时的图片
voidHelloWorld::tableCellHighlight(TableView* table, TableViewCell* cell){
   
auto texture  = Director::getInstance()->getTextureCache()->addImage("btn-play-selected.png");
   
auto sp = (Sprite*)cell->getChildByTag(100);//************
    sp->
setTexture(texture);
   
}

//用户点击从某个子项上抬起时响应
voidHelloWorld::tableCellUnhighlight(TableView* table, TableViewCell* cell){
   
auto texture  = Director::getInstance()->getTextureCache()->addImage("btn-play-normal.png");
   
auto sp = (Sprite*)cell->getChildByTag(100);//************
    sp->
setTexture(texture);

}
//子项被回收时响应
voidHelloWorld::tableCellWillRecycle(TableView* table, TableViewCell* cell){

   
CCLOG("cell willRecycle ai index: %zd",cell->getIdx());

}






//TableViewDataSource:
//获取给定下标值的子项大小
SizeHelloWorld::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_tHelloWorld::numberOfCellsInTableView(TableView*table){

   
return 20;

}


0 0
原创粉丝点击