cocos2d-x之TableView列表

HelloWorld.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include <cocos-ext.h>

USING_NS_CC_EXT;
USING_NS_CC;//相当于using namespace cocos2d;

//使类继承TableViewDataSource类型添加列表项,继承TabelViewDelegate添加事件监听器
class HelloWorld : public cocos2d::Layer,TableViewDataSource,TableViewDelegate
{
public:
    // there‘s no ‘id‘ in cpp, so we recommend returning the class instance pointer
    static cocos2d::Scene* createScene();

// Here‘s a difference. Method ‘init‘ in cocos2d-x returns bool, instead of returning ‘id‘ in cocos2d-iphone
    virtual bool init();

// implement the "static create()" method manually
    CREATE_FUNC(HelloWorld);
    
public:
    /**
     * cell height for a given table.
     *
     * @param table table to hold the instances of Class
     * @return cell size
     */
    //特定的位置的table的列表项的大小
    //设置大小,Size 的命名空间为cocos2d
    virtual Size cellSizeForTable(TableView *table);
    /**
     * a cell instance at a given index
     *
     * @param idx index to search for a cell
     * @return cell found at idx
     */
    //创建指定位置的列表项,
    virtual TableViewCell* tableCellAtIndex(TableView *table, ssize_t idx);
    /**
     * Returns number of cells in a given table view.
     *
     * @return number of cells
     */
    
    //列表里面一共有多少个列表项,返回100,就是有一百个
    virtual ssize_t numberOfCellsInTableView(TableView *table);
    
public://设置事件监听器
    /**
     * Delegate to respond touch event
     *
     * @param table table contains the given cell
     * @param cell  cell that is touched
     * @js NA
     * @lua NA
     */
    virtual void tableCellTouched(TableView* table, TableViewCell* cell);
    /**
     * @js NA
     * @lua NA
     */
    virtual void scrollViewDidScroll(ScrollView* view) {};
    /**
     * @js NA
     * @lua NA
     */
    virtual void scrollViewDidZoom(ScrollView* view) {};
    
};

#endif // __HELLOWORLD_SCENE_H__

HelloWorld.cpp

#include "HelloWorldScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"

USING_NS_CC;

using namespace cocostudio::timeline;

Scene* HelloWorld::createScene()
{
    // ‘scene‘ is an autorelease object
    auto scene = Scene::create();
    
    // ‘layer‘ is an autorelease object
    auto layer = HelloWorld::create();
    
    // add layer as a child to scene
    scene->addChild(layer);
    
    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    //创建列表项
    TableView *tv = TableView::create(this, Size(300, 300));
    
    tv->setAnchorPoint(Point(0, 0));//设置锚点
    
    tv->setPosition(100, 0);//设置位置
    
    tv->setDelegate(this);//设置列表项的事件监听器
    
    addChild(tv);//将列表项添加层中
    
    return true;
}

Size HelloWorld::cellSizeForTable(cocos2d::extension::TableView *table){
    return Size(300, 50);
}

TableViewCell* HelloWorld::tableCellAtIndex(cocos2d::extension::TableView *table, ssize_t idx){
    
    /**获取到一个table cell,若没有则返回值为空,若能够获取到cell,则返回值不为空
     如果一个列表项曾经呈现过,但是在拖动列表项时,被隐藏了,被拖出界面时,
     这个列表项会被回收,会被放在一个table cell的一个队列中,
     如果还有新的列表项需要呈现时,就先在这个回收的队列中查找,
     看看有没有被回收的,如果有回收的则直接使用,没有的话,重新创建
     */
    TableViewCell *cell = table->dequeueCell();
    
    LabelTTF *label;//定义一个文本标签,在下面创建
    
    //如果回收队列中没有回收的,则创建列表项
    if(cell == NULL){
        cell = TableViewCell::create();//创建新的列表项
        label = LabelTTF::create();//创建文本标签
        label->setTag(2);//创建label的标签,标签为2
        label->setFontSize(30);//设置label的文字大小
        label->setAnchorPoint(Point(0, 0));//设置label的锚点
        cell->addChild(label);//将文本添加到列表项中
        
    }else{//如果能够获取到被回收的列表项时,就从回收的列表项中获取子对象就是label子对象
        label = (LabelTTF*)cell->getChildByTag(2);//获取标签
    }
    
    //用cocos2d中包装的一个字符工具
    label->setString(StringUtils::format("label %ld",idx));
    
    return cell;//返回cell
}

ssize_t HelloWorld::numberOfCellsInTableView(cocos2d::extension::TableView *table){
    return 100;//定义一个100个的列表项
}

//获取被点击的列表项cell,可以获取到被点击的列表项的内部数据
void HelloWorld::tableCellTouched(cocos2d::extension::TableView *table, cocos2d::extension::TableViewCell *cell){
    LabelTTF *label = (LabelTTF*)cell->getChildByTag(2);
    log("%s",label->getString().c_str());//获取点击的列表项的内容
}

时间: 2024-08-28 15:43:23

cocos2d-x之TableView列表的相关文章

iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示

文本将会实现把数据存储到plist文件里.然后在程序中进行读取.在TableView控件中依据不同的类别显示Section. 有关TableView 的其它实现,请參考<iOS项目开发实战--学会使用TableView列表控件(一)><iOS项目开发实战--学会使用TableView列表控件(二)><iOS项目开发实战--学会使用TableView列表控件(三)了解Section>. (1)新建一个Property List文件,这个也就是plist文件.我取名为dat

iOS 如何设置tableview列表的cell上的的设置删除键 、置顶按钮、 未读信息按钮

思路很重要! 主要是写下我实现的具体思想,效果:首先,将cell向左滑动的时候,就会出现 删除  置顶 等按钮,那么我们就可以设计在cell上加两层的控件,第一层放的便是你要添加的 删除  置顶 等按钮  ,把这些按钮布置在cell的右侧  然后在第二层就是放一个uiview 这个uiview大小和cell的大小一样  然后再到uiview上添加一些显示数据的控件.  问题: 那第一层的 删除和置顶等按钮不是被覆盖了吗?  对 要的就是这种效果,现在的解决思路就是在uiview 上添加一个 pa

【Cocos2d-X】TableView的使用

在Cocos2d-x使用TableView的过程如下: 首先用一个类继承CCTableViewDelegate(代理)和CCTableViewDataSource(数据源): 然后实现里面的有关tableView操作和内容的四个抽象方法: 最后就可以在场景类中通过CCTableView来使用这个类,CCTableView会分别设置代理对象和数据源对象 示例: TableView.h #ifndef _TABELVIEW_H_ #define _TABLEVIEW_H_ #include "coc

macOS开发之NSTableView的应用详解 - 转

传送门:https://my.oschina.net/u/2340880/blog/886861 摘要: NSTableView是AppKit中的表视图控件,是macOS开发中非常重要的一种视图控件.熟练应用NSTableView控件对mac软件开发十分重要. NSTableView的应用详解 一.引言 和iOS开发中的UITableView有很大差别,NSTableView并非是一个可滚动的列表视图,其是一个不可滚动.支持多列多行的原始列表视图.若要使NSTableView支持滚动,通常会将其

TYAttributedLabel——简单,强大的iOS属性文本控件

本文转载至 http://www.mobile-open.com/2015/86578.html TYAttributedLabel 简单,强大的属性文本的控件(无需了解CoreText),支持图文混排显示,支持添加链接,image和UIView控件,支持自定义排版显示 更新: v2.4 修复imge放大bug,新增imageAlignment 和 autolayout支持,以及相应的demo,感谢xinzhengzhang,nonstriater v2.3 新增 做题demo,代码优化(4s真

ios SearchBar

在移动应用程序的世界里,用户对信息获取的速度要求非常高! iOS用户希望他们需要的信息能够迅速地,直观地展现在他们面前. 因为UITableView的上下滚动能让用户迅速,自然地浏览大量信息,许多基于UIKit的应用都使用了UITableView来组织信息.但如果信息量非常非常大,让用户上下滚动如此长的列表是非常没有效率的.所以一个搜索的功能就是必须的了. 幸运的是,UIKit里有一个叫做UISearchBar的组件,能让用户迅速的筛选有用的信息. 在这个教程里,你会学习如何将这个搜索的组件融入

IOS延时加载网络图片

    重网上下载图片是很慢的,为了不影响体验,选择延时加载图片是很好的办法. 一个tableView 列表,左边暂时没有图 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { static NSString *CellIdentifier = @"myCell"; UITableViewCell *cell = [tableVie

Cocos2d-X3.0 刨根问底(四)----- 内存管理源码分析

本系列文章发表以来得到了很多朋友的关注,小鱼在这里谢谢大家对我的支持,我会继续努力的,最近更新慢了一点,因为我老婆流产了抽了很多时间来照顾她希望大家谅解,并在此预祝我老婆早日康复. 上一篇,我们完整的分析了Director这个类,并提到了Director这个继承了Ref这个类,大致看了一下Ref这个类,是一个关于引用计数的类,从而我们可以推断Cocos2d-x用了一种引用计数的方式来管理内存对象,这一章我们刨根问底Cocos2d-x是如何实现内存管理及我们如何在实际项目开发中应用Cocos2d-

iOS-键盘监听YYKeyboardManager

如果键盘弹出覆盖了原有的试图,这种效果并不好,所以我们就要在键盘弹出的时候,监听键盘的位置来改变我们一些试图的位置,如果tableView列表等:在这里推荐一个大牛ibireme写的YYKeyboardManager,Git地址:https://github.com/ibireme/YYKeyboardManager:用CocoaPods导入:pod 'YYKeyboardManager' ,终端 pod install 就可以使用了. 开启键盘监听 头文件引用:#import "YYKeybo