Cocos2d-x学习笔记(八)-------->TableView控件

前端之家收集整理的这篇文章主要介绍了Cocos2d-x学习笔记(八)-------->TableView控件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
TableView控件@H_404_5@
TableView控件@H_404_5@:表框控件,TableView@H_404_5@控件可以提供一个列表,列表是由多个单元组成,这些单元称为Cell@H_404_5@,成水平或垂直方向对齐。每个单元中可以放置任意类型的对象,比如:字体标签,精灵图片,按钮等等。
使用@H_404_5@:
注@H_404_5@:本例结合Extension\TableViewTest@H_404_5@子项目。
生成一个空的TableView@H_404_5@,指定其工作的方向是水平还是垂直方向,然后设定位置。
CCTableView* tableView = CCTableView::create(this,CCSizeMake(250,60));
tableView->setDirection(kCCScrollViewDirectionHorizontal);
tableView->setPosition(ccp(20,winSize.height/2-30));
第一个参数类型是 CCTableViewDataSource@H_404_5@,它是 CCTableView@H_404_5@控件的数据源类,这个数据源类会提供三个方法,用于控制单元的数量和大小,提供数据单元的内容
CCSize cellSizeForTable(CCTableView *table)@H_404_5@:确定每个单元的大小范围。
@H_404_5@CCTableViewCell* tableCellAtIndex(CCTableView *table,unsigned int idx)@H_404_5@:确定每个单元的内容
@H_404_5@unsigned int numberOfCellsInTableView(CCTableView *table)@H_404_5@:确定列表一共有多少个 Cell@H_404_5@单元。

片段@H_404_5@:
CCSize TableViewTestLayer::tableCellSizeForIndex(CCTableView *table,unsigned int idx)
{
    if (idx == 2) {
        return CCSizeMake(100,100);
    }
    return CCSizeMake(60,60);
}

CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table,unsigned int idx)
{
    CCString *string = CCString::createWithFormat("%d",idx);
    CCTableViewCell *cell = table->dequeueCell();
    if (!cell) {
        cell = new CustomTableViewCell();
        cell->autorelease();
        CCSprite *sprite = CCSprite::create("Images/Icon.png");
        sprite->setAnchorPoint(CCPointZero);
        sprite->setPosition(ccp(0,0));
        cell->addChild(sprite);

        CCLabelTTF *label = CCLabelTTF::create(string->getCString(),"Helvetica",20.0);
        label->setPosition(CCPointZero);
		label->setAnchorPoint(CCPointZero);
        label->setTag(123);
        cell->addChild(label);
    }
    else
    {
        CCLabelTTF *label = (CCLabelTTF*)cell->getChildByTag(123);
        label->setString(string->getCString());
    }


    return cell;
}

unsigned int TableViewTestLayer::numberOfCellsInTableView(CCTableView *table)
{
    return 20;
}
用于展示 CCTableView@H_404_5@控件的当前类 TableViewTestLayer@H_404_5@定义时继承于 CCTableViewDataSource@H_404_5@,,所以当前类中会定义并实现以上三个函数的具体内容。通过实现 CCTableViewDataSource@H_404_5@类的三个函数,列表中的每个 Cell@H_404_5@的大小被确定为60*60像素大小;列表中一共有20个 Cell@H_404_5@;每个 Cell@H_404_5@提供的内容是一个图片精灵和当前 Cell@H_404_5@的编号 ID@H_404_5@。

片段@H_404_5@:
void TableViewTestLayer::tableCellTouched(CCTableView* table,CCTableViewCell* cell)
{
    CCLOG("cell touched at index: %i",cell->getIdx());
}
生成好的 CCTableView@H_404_5@对象之后,还要指定它的委托对象,委托对象就是一个能够帮 CCTableView@H_404_5@控件处理事件的对象,这个对象必须是 CCTableViewDelegate@H_404_5@类型或者是其子 CCTableViewDelegate@H_404_5@的子类,在 TableViewTest@H_404_5@实例项目中,我们将当前类 CCTableViewTestLayer@H_404_5@同时也定义成了 CCTableViewDelegate@H_404_5@的子类,让其定义并实现处理 CCTableView@H_404_5@控件的 tableCellTouched(CCTableView* table,CCTableViewCell* cell)@H_404_5@回调函数,这个函数会在某个 Cell@H_404_5@被点击后被调用,这里可以实现某个 Cell@H_404_5@被选中后的处理过程,比如:一个玩家成绩列表,当某个成绩所在的 Cell@H_404_5@被选中时,可以详细显示本次成绩的具体时间、分数等内容

tableView->setDelegate(this);
this->addChild(tableView);
tableView->reloadData();
为CCTableView设置委托对象,然后添加到场景。

效果@H_404_5@:


重要的两个函数@H_404_5@:
CCTableViewCell* tableCellAtIndex(CCTableView *table,unsigned int idx)@H_404_5@:函数在第一次初始化列表控件时会被每个Cell单元调用一次,以至于每个Cell单元都会被填充好内容,当列表在使用过程中,比如拖拽列表,导致列表中之前没有显示的Cell会被显示出来,对应的Cell单元回调用函数,这时可以根据当前单元的索引ID,更新其要显示内容
CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table,20.0);
        label->setPosition(CCPointZero);
		label->setAnchorPoint(CCPointZero);
        label->setTag(123);
        cell->addChild(label);
    }
    else
    {
        CCLabelTTF *label = (CCLabelTTF*)cell->getChildByTag(123);
        label->setString(string->getCString());
    }


    return cell;
}

void tableCellTouched(CCTableView* table,CCTableViewCell* cell)@H_404_5@:当 Cell@H_404_5@单元被点击时调用的回调函数函数第二个参数是 CCTableViewCell@H_404_5@,也就是被点击到的Cell单元对象,在函数中我们可以获得 Cell@H_404_5@单元的索引 ID@H_404_5@,这样我们就可以知道当前是第几个 Cell@H_404_5@单元被击中,并作出相应处理。
void TableViewTestLayer::tableCellTouched(CCTableView* table,cell->getIdx());
}

猜你在找的Cocos2d-x相关文章