zoukankan      html  css  js  c++  java
  • 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; }




  • 相关阅读:
    [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
    [C#] 将NLog输出到RichTextBox,并在运行时动态修改日志级别过滤
    [Java] 绕过证书验证调 HTTPS 接口时报 “SSLHandshakeException: DHPublicKey does not comply to algorithm constraints”的解决办法
    [Chrome插件] SelectJd(京东自营筛选器) v1.0.0 发布
    全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件
    [C#] 解决Silverlight反射安全关键(SecuritySafeCritical)时报“System.MethodAccessException: 安全透明方法 XXX 无法使用反射访问”的问题
    升级SilverLight为5.1.50907.0后,VS调试时报“无法启动调试--未安装 Silverlight Developer 运行时。请安装一个匹配版本”的处理办法
    JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档
    JavaScript 实现命名空间(namespace)的最佳方案——兼容主流的定义类(class)的方法,兼容所有浏览器,支持用JSDuck生成文档
    Javascript自动化文档工具JSDuck在Windows下的使用心得
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5197084.html
Copyright © 2011-2022 走看看