【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();

效果图:
【Cocos2d-X】TableView的使用_第1张图片

点击某一图片后:
【Cocos2d-X】TableView的使用_第2张图片

你可能感兴趣的:(代理,tableview,数据源,cocos2d-x,Cocos)