TableView控件@H_404_5@
TableView控件@H_404_5@:表框控件,TableView@H_404_5@控件可以提供一个列表,列表是由多个单元组成,这些单元称为Cell@H_404_5@,成水平或垂直方向对齐。每个单元中可以放置任意类型的对象,比如:字体标签,精灵图片,按钮等等。
使用@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@控件的数据源类,这个数据源类会提供三个方法,用于控制单元的数量和大小,提供数据单元的内容。
● @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设置委托对象,然后添加到场景。
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()); }