cocos2dx3.x的TableView使用

1.TableView

TableView直译为表视图(感觉则拗口),一般用于展示信息或者商城商品等。可以直接理解为一个信息展示的框。

2.效果展示

这里我做了一个3x3的TablelView表视图,展示了几张英雄的图片(其实就一个)。

 

3.代码

#ifndef TABLEVIEW_TEST_H_
#define TABLEVIEW_TEST_H_
#include"cocos2d.h"
#include"cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
class TableViewTest:public Layer,public TableViewDataSource,public TableViewDelegate
{
public:
	bool init()override;
	static Scene* createScene();
	Size tableCellSizeForIndex(TableView* table,ssize_t idx)override;
	TableViewCell* tableCellAtIndex(TableView* table,ssize_t idx)override;
	ssize_t numberOfCellsInTableView(TableView* table)override;
	void tableCellTouched(TableView* table,TableViewCell* cell)override;
	void tableCellHighlight(TableView* table, TableViewCell* cell)override;
	void tableCellUnhighlight(TableView* table, TableViewCell* cell)override;
	CREATE_FUNC(TableViewTest);

};
#endif // !TABLEVIEW_TEST_H_

 

#include "TableViewTest.h"

bool TableViewTest::init()
{
	if (!Layer::init())
	{
		return false;
	}
	//
	const auto size = Director::getInstance()->getWinSize();
	//
	const auto layer = LayerColor::create(Color4B::RED);
	this->addChild(layer);
	//
	auto tableView = TableView::create(this,Size(270,270));
	tableView->setDelegate(this);
	tableView->setPosition(size/2);
	tableView->reloadData();
	tableView->setDirection(ScrollView::Direction::VERTICAL);
	tableView->setVerticalFillOrder(TableView::VerticalFillOrder::BOTTOM_UP);
	//tableView->setContentOffset(Vec2(45,45),true);
	this->addChild(tableView);
	return true;
}

Scene* TableViewTest::createScene()
{
	auto scene = Scene::create();
	auto layer = TableViewTest::create();
	scene->addChild(layer);
	return scene;
}

Size TableViewTest::tableCellSizeForIndex(TableView* table, ssize_t idx)
{
	return Size(270,90);
}

TableViewCell* TableViewTest::tableCellAtIndex(TableView* table, ssize_t idx)
{
	auto tablecell = table->dequeueCell();
	if (!tablecell)
	{
		tablecell = TableViewCell::create();
		auto cellSprite1 = Sprite::create("header1001.png");
		cellSprite1->setPosition(Vec2(45,45));
		tablecell->addChild(cellSprite1);
		auto cellSprite2 = Sprite::create("header1001.png");
		cellSprite2->setPosition(Vec2(135, 45));
		tablecell->addChild(cellSprite2);
		auto cellSprite3 = Sprite::create("header1001.png");
		cellSprite3->setPosition(Vec2(225, 45));
		tablecell->addChild(cellSprite3);
	}
	return tablecell;
}

ssize_t TableViewTest::numberOfCellsInTableView(TableView* table)
{
	return ssize_t(10);
}

void TableViewTest::tableCellTouched(TableView* table, TableViewCell* cell)
{
	log("%d", cell->getIdx());
}

void TableViewTest::tableCellHighlight(TableView* table, TableViewCell* cell)
{
	log("Click Cell %d",cell->getIdx());
}

void TableViewTest::tableCellUnhighlight(TableView* table, TableViewCell* cell)
{
	log("Release Cell %d", cell->getIdx());
}

4.细节说明

1.尽管返回TableCell的大小的方法并非纯虚函数,但是经过我测试发现,不返回其大小会导致无法绘制的情况出现,所以需要实现。

Size tableCellSizeForIndex(TableView* table,ssize_t idx)override;

2.再为TabelCell添加子节点即需要显示的内容时,需要设置坐标,默认为0坐标,而图片精灵的锚点一般为0.5,所以不设置坐标会导致只会显示1/4的图片。

3.经过测试可以发现3个触摸函数的执行顺序为tableCellHightlight()->tableCellUnhightlight()->tableCellTouched();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值