CCTableView 简单样例
非常像android中的listview
#pragma once; #include "cocos2d.h"
using namespace cocos2d; //使用CCTableView必须包括扩展库和命名空间
#include "cocos-ext.h"
USING_NS_CC_EXT; //须要实现CCTabelViewDelegate和CCTabelViewDataSource这俩个接口
class tableTest : public cocos2d::CCLayer,public CCTableViewDelegate,public CCTableViewDataSource
{
public:
virtual bool init(); static cocos2d::CCScene* scene(); CREATE_FUNC(tableTest); //继承自以上的接口须要实现的方法例如以下
//从CCTableViewDataSource继承下来的 CCSize tableCellSizeForIndex(CCTableView * table,unsigned int index);
CCTableViewCell * tableCellAtIndex(CCTableView * table,unsigned int index);
unsigned int numberOfCellsInTableView(CCTableView * table);
virtual CCSize cellSizeForTable (CCTableView *table); //下面俩个函数能够覆写,也能够不覆写,是从CCTableViewDelegate继承下来的
void tableCellHighlight(CCTableView * table,CCTableViewCell * cell);
void tableCellUnhighlight(CCTableView * table,CCTableViewCell * cell);
void tableCellTouched(CCTableView * table,CCTableViewCell * cell);
virtual void tableCellWillRecycle (CCTableView *table, CCTableViewCell *cell);
//由于继承自CCScrollViewDelegate 所以要实现这俩个方法,里边一般都不写东西
void scrollViewDidScroll(CCScrollView *){};
void scrollViewDidZoom(CCScrollView *){};
};
#include "tableTest.h"
USING_NS_CC_EXT;
USING_NS_CC;
bool tableTest::init()
{
if ( !CCLayer::init() )
{
return false;
} CCSize size = CCDirector::sharedDirector()->getWinSize(); /*
创建一个竖直方向的tableview
*/ //初始化的时候第一个參数是CCTableViewDataSource。第二个參数代表tableview的大小
CCTableView * table = CCTableView::create(this,CCSize(100,320)); //设置delegate代理
table->setDelegate(this); //设置tableview的滑动的方向
//kCCScrollViewDirectionHorizontal 水平
//kCCScrollViewDirectionVertical 竖直
table->setDirection(kCCScrollViewDirectionVertical); //CCTableView默认是以左下角点设置坐标位置的,它继承自CCLayer,这一点不难理解
table->setPosition(ccp(size.width/5,0));
table->setDataSource(this);
this->addChild(table); /*
创建一个水平方向的tableview
*/
CCTableView * tableView = CCTableView::create(this,CCSize(size.width/2,50));
tableView->setDelegate(this);
tableView->setDirection( kCCScrollViewDirectionHorizontal);
tableView->setPosition(ccp(size.width/2,size.height/2));
table->setDataSource(this);
this->addChild(tableView);
//这句话一定要加上啊,意思是用现有的配置去刷新全部的cell方法被调用之后。系统会又一次运行一遍TableViewDelegate的相关函数。最基本的cellFor***方法,单元格的设置信息会被又一次运行一遍。 tableView->reloadData(); //相当android中adapte.notificydatachange(); return true;
} //这个函数是用来获得cell的
CCTableViewCell * tableTest::tableCellAtIndex(CCTableView * table,unsigned int index)
{
CCString * string = CCString::createWithFormat("%d",index+1); //获得一个可用的cell,由于在我们滑动cell的时候有些cell是显示的。有些不是显示出来的。把没有渲染的cell拿过来
//这样就不用又一次new出一个cell了,这种话能够减小内存的开销
CCTableViewCell * cell = table->dequeueCell();
if(!cell)
{
cell = new CCTableViewCell();
cell->autorelease(); //加入背景图片到cell中,便于区分边界
CCSprite * background = CCSprite::create("cell.png");
background->setAnchorPoint(ccp(0,0));
background->setPosition(CCPointZero);
cell->addChild(background,0); //加入文本信息到cell中
CCLabelTTF * text = CCLabelTTF::create(string->getCString(),"",20);
text->setPosition(ccp(25,25));
text->setTag(1);
text->setColor(ccc3(255,0,0));
cell->addChild(text,1); //加入精灵到cell的中心位置
CCSprite * sprite = CCSprite::create("icon.png");
sprite->setPosition(ccp(50,25));
cell->addChild(sprite,1);
}
//else中获得是没有渲染出来的cell,cell中原有的内容还存在
else
{
//改变原来cell中的文本信息
CCLabelTTF * text = (CCLabelTTF *)cell->getChildByTag(1);
text->setString(string->getCString());
} return cell;
} //这里设置每一个cell的大小
CCSize tableTest::tableCellSizeForIndex(CCTableView * table,unsigned int index)
{
if(index=3){
return CCSize(300,50);}
else{
return CCSize(100,50);
}
} //这里设置一共同拥有多少个cell
unsigned int tableTest::numberOfCellsInTableView(CCTableView * table)
{
return 20;
}
//和tableCellSizeForIndex有什么差别不明确
cocos2d::CCSize tableTest::cellSizeForTable(CCTableView *table)
{
return CCSize(200,50);
} //假设某个cell被点击了,则会调用此函数
void tableTest::tableCellHighlight(CCTableView * table,CCTableViewCell * cell)
{
CCLog("%d:tableCellHighlight!",cell->getIdx()+1);
} //点击之后会调用这个函数,观察这几个函数的调用顺序。发现highlight首先调用
//unhighlight然后调用,最后是tableCellTouched
void tableTest::tableCellUnhighlight(CCTableView * table,CCTableViewCell * cell)
{
CCLog("%d:tableCellUnhighlight!",cell->getIdx()+1);
}
//这里设置cell被点击以后的回调函数
void tableTest::tableCellTouched(CCTableView * table,CCTableViewCell * cell)
{
CCLog("%d:tableCellTouched!",cell->getIdx()+1);
}
void tableTest::tableCellWillRecycle(CCTableView *table, CCTableViewCell *cell)
{
CCLog("%d:tableCellWillRecycle!",cell->getIdx()+1);
}
cocos2d::CCScene* tableTest::scene()
{
CCScene* scene=CCScene::create();
scene->addChild(tableTest::create());
return scene;
}
CCTableView 简单样例的更多相关文章
- extern外部方法使用C#简单样例
外部方法使用C#简单样例 1.添加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", ...
- spring事务详解(二)简单样例
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...
- velocity简单样例
velocity简单样例整体实现须要三个步骤,详细例如以下: 1.创建一个Javaproject 2.导入须要的jar包 3.创建须要的文件 ============================= ...
- 自己定义隐式转换和显式转换c#简单样例
自己定义隐式转换和显式转换c#简单样例 (出自朱朱家园http://blog.csdn.net/zhgl7688) 样例:对用户user中,usernamefirst name和last name进行 ...
- VC6 鼠标钩子 最简单样例
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它能够截获并处理送给其它应用程序的消息,来完毕普通应用程序 ...
- gtk+3.0的环境配置及基于gtk+3.0的python简单样例
/********************************************************************* * Author : Samson * Date ...
- java 使用tess4j实现OCR的最简单样例
网上很多教程没有介绍清楚tessdata的位置,以及怎么配置,并且对中文库的描述也存在问题,这里介绍一个最简单的样例. 1.使用maven,直接引入依赖,确保你的工程JDK是1.8以上 <dep ...
- 使用SALT-API进入集成开发的简单样例
测试的时候,可以CURL -K,但真正作集成的时候,却是不可以的. 必须,不可以让TOKEN满天飞吧. 现在进入这个阶段了.写个样例先: import salt import salt.auth im ...
- VB.net数据库编程(03):一个SQLserver连接查询的简单样例
这个样例,因为在ADO.net入门已经专门学了,再次进行复习 一下. 主要掌握连接字串的情况. 过程就是: 1.引用System.Data.SqlClient.而Access中引用 的是System. ...
随机推荐
- APP分享抓取网页图片
var getShareImages = { defaultimg:"defaultimg.png", _allImgs:null, init:function(){ getSha ...
- 对原生js的一些小尝试
意图仿造JQ操作以及弄个个人工具箱,不断完善中,代码均为个人摸索,所以肯定会有不少不足的地方,希望读者们能提出来. var xzhUtils = { //-----DOM对象添加类----- //-- ...
- android 添加左右滑屏手势
今天要在自己的项目中添加左右滑动,实现日期的加减(原来已经做了加减按键).滑动在一个中间的layout中进行 思路:添加左右划屏幕判断,得到判断后模拟加减按键按下. 模拟按键按下用 mbotton.p ...
- C语言入门(3)——对Hello World程序的解释
上篇我们写了一个最简单的程序.这个简单的程序包含了很多重要的内容.本篇我们通过这个最简单的Hello World程序逐一讲解C语言程序的一些特点. 打开Visual Studio 2013 通过菜单- ...
- STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...
- [Leetcode][Python]29: Divide Two Integers
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 29: Divide Two Integershttps://oj.leetc ...
- 通过crash了解linux页表
目的: 通过一个c语言实例,了解linux页表的组织结果和mmu的工作原理. 通过页表找到一个物理地址, 对比物理地址与虚拟地址的内容是否一致. 运行环境: $ uname -r3.15.6-200. ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(一)
目的: 结合现在比较流行的技术,通过一个demo 展示一个全栈式设计的各种技能. 一个全栈式的工程师,应该能设计通过verilog/VHDL做logical设计.能写内核驱动,能架站. 要熟悉veri ...
- c语言函数---M
书画小说软件 制作更满意的读.更舒心的写.更轻松的公布 最全古典小说网 由本软件公布所得 main()主函数 每一C 程序都必须有一main()函数, 能够依据自己的爱好把它放在程序的某 个地方.有些 ...
- 素数距离问题_ny_24.java
素数距离问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距 ...