CCTable Viewの乱順の使用と解決


cctableviewは、等幅の要素を表示するためにCCScrollViewおよびCCScrollView Delegateに継承する.スクロールをサポート
testの例は以下のように抽出され、修正され、公式に与えられた例はドラッグすると乱序が現れる.
class TableViewTestLayer : public cocos2d::CCLayer, public cocos2d::extension::CCTableViewDataSource, public cocos2d::extension::CCTableViewDelegate
{
public:
virtual void onEnter();
virtual void onExit();
    virtual bool init();  
   
void toExtensionsMainLayer(CCObject *sender);


    CREATE_FUNC(TableViewTestLayer);
    
    virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);  //              ,          ,           ,reloaddata    。
    virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}
    virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);
    virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);  //          
    virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx); // 
    virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);   //    tableview       
// when touching on the cell, it will highlight
virtual void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell); 
virtual void tableCellUnhighlight(cocos2d::extension::CCTableView *table, cocos2d::extension::CCTableViewCell *cell);
};


class CustomTableViewCell : public cocos2d::extension::CCTableViewCell
{
public:
virtual void draw();
};

bool TableViewTestLayer::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }


CCSize winSize = CCDirector::sharedDirector()->getWinSize();


   CCTableView* tableView = CCTableView::create(this, CCSizeMake(320, 30));
    tableView->setDirection(kCCScrollViewDirectionHorizontal);
    tableView->setPosition(ccp(20,winSize.height/2-30));
    tableView->setDelegate(this);
//this->addChild(tableView);
tableView->reloadData();


tableView = CCTableView::create(this, CCSizeMake(60, 200));
tableView->setDirection(kCCScrollViewDirectionVertical);
//tableView->setPosition(ccp(winSize.width-150,winSize.height/2-120));
tableView->setPosition(ccp(0 ,80));
tableView->setDelegate(this);
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
this->addChild(tableView);
tableView->reloadData();


// Back Menu
CCMenuItemFont *itemBack = CCMenuItemFont::create("Back", this, menu_selector(TableViewTestLayer::toExtensionsMainLayer));
itemBack->setPosition(ccp(50,  25));
CCMenu *menuBack = CCMenu::create(itemBack, NULL);
menuBack->setPosition(CCPointZero);
addChild(menuBack);


    return true;
}


void TableViewTestLayer::toExtensionsMainLayer(cocos2d::CCObject *sender)
{


}






void TableViewTestLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell)
{
    CCLOG("cell touched at index: %i", cell->getIdx());
}


CCSize TableViewTestLayer::cellSizeForTable(CCTableView *table)
{
    return CCSizeMake(60, 60);
//return CCSizeMake(480, 320);
}


CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
CCLOG("tableCellAtIndex at index: %i", idx);
    CCString *string = CCString::createWithFormat("%d", idx);
    CCTableViewCell *cell = table->dequeueCell();
    if (!cell) {
        cell = new CustomTableViewCell();
        cell->autorelease();
    }
    else
    {
cell->removeAllChildrenWithCleanup(true);   //        
    }

CCSprite *sprite = CCSprite::create("Icon.png");
sprite->setAnchorPoint(ccp(0, 0));
sprite->setPosition(ccp(0, 0));
sprite->setTag(789);
cell->addChild(sprite);


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


//               

void TableViewTestLayer::tableCellHighlight(CCTableView *table, CCTableViewCell *cell)  
{  


CCLOG(">>>>>>>>>>>>>>>>>>>>>>>>>tableCellHighlight<<<<<<<<<<<<<<<<<<<<");  


//CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("HelloWorld.png");  


CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);  
pSprite->setColor(ccc3(120, 120, 120));


}  
void TableViewTestLayer::onEnter()
{
CCLayer::onEnter();
}


void TableViewTestLayer::onExit()
{
//CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}
//         
void TableViewTestLayer::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell)  
{  
CCLOG(">>>>>>>>>>>>>>>>>>>>>>>>>tableCellUnhighlight<<<<<<<<<<<<<<<<<<<<");  
CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("Icon.png");  
CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);  
pSprite->setColor(ccc3(255, 255, 255));
}  


unsigned int TableViewTestLayer::numberOfCellsInTableView(CCTableView *table)
{
    return 20;
}


void TableViewTestLayer::scrollViewDidScroll(cocos2d::extension::CCScrollView* view)
{
CCLOG("---> scrollViewDidScroll <--");
}




void CustomTableViewCell::draw()
{
CCTableViewCell::draw();
}