class ChatView :public Layer, public TableViewDataSource, public TableViewDelegate
{
public:
virtual bool init();
CREATE_FUNC(ChatView);
void ChatTypeBtn(Ref* object,TouchEventType type);//
/* 必须实现的函数 */
// 当滑动tableview时触发该方法 参数为当前的tableview对象
virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view) {};
// 当tableview被放大或缩小时触发该方法 参数为当前tableview对象
virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view) {}
// 当cell被点击时调用该方法 参数为当前的tableview对象与被点击的cell对象
virtual void tableCellTouched(TableView* table, TableViewCell* cell);
// 设置tableview的Cell大小
virtual Size tableCellSizeForIndex(TableView *table, ssize_t idx);
// 获取编号为idx的cell
virtual TableViewCell* tableCellAtIndex(TableView *table, ssize_t idx);
// 设置tableview中cell的个数
virtual ssize_t numberOfCellsInTableView(TableView *table);
public:
Layout *_pLayout;
};
在Init中实现:
//创建一个talbleview 将datasource设置为当前的类的对象 tableview的显示区域大小为 300 * 300
TableView* tableView = TableView::create(this,Size(300,300));//this,Size(300, 300)
//设置tableview为水平方向 ScrollView::Direction::VERTICAL 为垂直,ScrollView::Direction::HORIZONTAL 为水平
tableView->setDirection(cocos2d::extension::ScrollView::Direction::VERTICAL);
//设置位置
tableView->setPosition(Vec2(visibleSize.width/2,visibleSize.height/3));
//设置代理对象
tableView->setDelegate(this);
tableView->setDataSource(this);
//填充顺序
tableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);
//添加tableview到当前layer
this->addChild(tableView);
//加载tableview
tableView->reloadData();
执行上面一段代码 在Xcode上 最终在下面函数第一行崩溃了。不知所以然了
void TableView::_updateCellPositions()
{
long cellsCount = _dataSource->numberOfCellsInTableView(this);
_vCellsPositions.resize(cellsCount + 1, 0.0);
if (cellsCount > 0)
{
float currentPos = 0;
Size cellSize;
for (int i=0; i < cellsCount; i++)
{
_vCellsPositions* = currentPos;
cellSize = _dataSource->tableCellSizeForIndex(this, i);
switch (this->getDirection())
{
case Direction::HORIZONTAL:
currentPos += cellSize.width;
break;
default:
currentPos += cellSize.height;
break;
}
}
_vCellsPositions = currentPos;//1 extra value allows us to get right/bottom of the last cell
}
}
