cocos2d-x源码总目录
http://blog.youkuaiyun.com/u011225840/article/details/31743129
源码来自2.x,转载请注明
1.继承结构
首先来看下CCTableView的继承结构
从继承结构上看,CCTableView是一种CCScrollView,所以为了研究CCTableView的源码,清先去了解CCScrollView的源码http://blog.youkuaiyun.com/u011225840/article/details/30033501。
其次,CCTableView也继承了CCScrollViewDelegate,从后面的源码分析中,我们可以看出主要是为了实现scrollViewDidScroll这个函数。从而使用CCScrollView的滚动时,可以实现CCTableView自己本身的操作。(如果你看到这里不懂,请务必先弄懂CCScrollView的源码。)
最后,除了继承结构,我们还需要了解三个重要的类。
CCTableViewCell,CCTableViewDelegate,CCTableViewDataSource。通过这三个类,CCTableView将数据与其他操作解耦。
2.相关类的分析
2.1CCTableViewCell
CCtableViewCell主要是含有一个唯一的标识符,允许TableView通过不同的idx来更新TableviewCell。
一般情况下,会写一个CustomCell来继承该类,该Cell上有每一个cell的样式(含有label?含有sprite?全在该cell中实现)
class CCTableViewCell: public CCNode, public CCSortableObject
{
public:
CCTableViewCell() {}
/**
* The index used internally by SWTableView and its subclasses
*/
unsigned int getIdx();
void setIdx(unsigned int uIdx);
/**
* Cleans up any resources linked to this cell and resets <code>idx</code> property.
*/
void reset();
void setObjectID(unsigned int uIdx);
unsigned int getObjectID();
private:
unsigned int m_uIdx;
};
2.2CCTableViewDataSource
CCTableViewDataSource是非常重要的一个类,TableView的数据相关的处理都与该类有关,请看他提供的四个函数,注释已经给出哦。
一般情况下,我们会让一个Custom类来继承他并实现方法。该Custom类一般是继承DataSource,TableViewDelegate,与一个CClayer,并含有一个CCTableView。
(在文章的最后,我会给出一个例子)。
//根据不同的idx,来告诉tableview cell的大小
virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx) {
return cellSizeForTable(table);
};
//提供一个通用的方法,给出table的cell大小,如果该table的cell大小都一样,一般都一样。。
virtual CCSize cellSizeForTable(CCTableView *table) {
return CCSizeZero;
};
//根据不同的idx,获得table的相应cell,一会分析table的dequeceCell时,再详细讲解此方法。
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx) = 0;
//返回table的cell个数。
virtual unsigned int numberOfCellsInTableView(CCTableView *table) = 0;
2.3 CCTableViewDelegate
提供了几个Delegate函数,以供TableView使用。Delegate的用法我在CCScrollView源码分析中已经说过,这里不再赘述。
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell) = 0;
这里只说下必须实现的这个函数,当table通过idx获取用户正在触摸该cell后,一定会调用该方法。(选择某个物件后,给人物穿上,就是通过这个方法来响应。)
3.CCTableView源码分析
3.1创建时
CCTableView提供了两个create函数
create(CCTableViewDataSource* dataSource, CCSize size);
create(CCTableViewDataSource* dataSource, CCSize size, CCNode *container);