终于明白一点了, 例子里把CCTableViewDataSource 也继承在 要显示的layer 里,这个是对新手看例子是一种严重的误导, cctableview 的数据无法再动态更新,
class CMyData: public cocos2d::extension::CCTableViewDataSource
{
public:
CMyData();
virtual ~CMyData();
virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView table);
virtual cocos2d::extension::CCTableViewCell tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);
virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);
public:
//清空label中文本
void clearAllCell();
public:
CCSize m_tableSize; //list 长宽
CCSize m_cellSize; //cell 长宽
int m_cellNum; //cell 个数
std::vectorstd::string m_string; //cell中label文本
std::string m_imagestr;
int m_iX;
int m_iY;
int m_iID;
int m_iParentID; //父窗口ID
int m_iControlID; //控件ID
};
应该分开写
class CMyListCtr: public cocos2d::CCLayer, public cocos2d::extension::CCTableViewDelegate
{
public:
CMyListCtr();
virtual ~CMyListCtr();
public:
// virtual bool init();
// CREATE_FUNC(CMyListCtr);
static CMyListCtr* createMyListCtr(CMyData* data);
bool init(CMyData data);
public:
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView view) {};
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}
virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);
virtual void Update(float dt);
public:
void valueChanged(CCObject* pSender , unsigned int controlEvent);
void setTextXY(float x,float y){m_textXY=ccp(x,y);}
void addCell(cocos2d::CCObject *sender);
void clearCell(cocos2d::CCObject sender);
void setCellString(const char str);
void clearCellString();
public:
CMyData* m_data;
private:
int m_iUsedCell;//使用了的格子数
cocos2d::CCPoint m_textXY;//输出文字的坐标
};