【已解决】通过CCTableView创建的滑屏,如何取得其中的项,从而改变其属性

首先放上部分代码,
先是头文件的,

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

USING_NS_CC;
USING_NS_CC_EXT;

class CPaintScene : public CCLayer, public CCTableViewDataSource, public CCTableViewDelegate
{
public:
    CPaintScene(void);
    ~CPaintScene(void);
    static CCScene *scene();
    CREATE_FUNC(CPaintScene);
    virtual bool init();

    virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView *view);
    virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView *view);

    //处理触摸事件,可以计算点击的是哪一个子项
    virtual void tableCellTouched(CCTableView *table, CCTableViewCell *cell);
    //每一项的宽度和高度
    virtual CCSize cellSizeForTable(CCTableView *table);
    //生成列表每一项的内容
    virtual CCTableViewCell *tableCellAtIndex(CCTableView *table, unsigned int idx);
    //一共多少项
    virtual unsigned int numberOfCellsInTableView(CCTableView *table);

    //
    virtual void tableCellHighlight(CCTableView* table, CCTableViewCell* cell);
    virtual void tableCellUnhighlight(CCTableView* table, CCTableViewCell* cell);
    virtual void tableCellWillRecycle(CCTableView* table, CCTableViewCell* cell);


```



然后是CPP文件里的主要方法,
bool CPaintScene::init()
{
    if (!CCLayer::init())
    {
        return false;
    }

    this->setTouchEnabled(true);
    CCSprite *bgSprite = CCSprite::create("shoeDrawing/drawingbg.png");
    bgSprite->setPosition(ccp(WINSIZE_WIDTH * 0.5f, WINSIZE_HEIGHT * 0.5f));

    // 将图片加载到精灵帧缓存池
    m_frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
    m_frameCache->addSpriteFramesWithFile("shoeDrawing/pen.plist", "shoeDrawing/pen.png");

    // 滑屏相关操作
    CCTableView *pTableView = CCTableView::create(this, CCSizeMake(800, 480));
    pTableView->setDirection(kCCScrollViewDirectionVertical); // 设置滚动的方向
    pTableView->setPosition(CCPointZero);
    pTableView->setDelegate(this);
    // 决定VIEW的单元如何填充
    pTableView->setVerticalFillOrder(kCCTableViewFillTopDown);
    this->addChild(pTableView,1);
    // 刷新VIEW
    pTableView->reloadData();
    //

    this->addChild(bgSprite,0);
    return true;
}



void CPaintScene::tableCellTouched(CCTableView *table, CCTableViewCell *cell)
{
    CCLOG("cell touched at index: %i", cell->getIdx());
    CCSprite *temp = (CCSprite *)(cell->getChildByTag(1)); 
    //temp->setPositionX(20.f);
}


CCTableViewCell *CPaintScene::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
    // 格式化相应的图片名称
    CCString *pString = CCString::createWithFormat("%d.png", idx + 1);
    CCTableViewCell *pCell = table->dequeueCell();// 
    if (!pCell)
    {
        pCell = new CCTableViewCell();
        pCell->autorelease();
        //CCSprite *penSprite = CCSprite::create("building.png");
        CCSprite *penSprite = CCSprite::createWithSpriteFrameName(pString->getCString());
        penSprite->setAnchorPoint(CCPointZero);
        penSprite->setPosition(CCPointZero);
        
        pCell->addChild(penSprite);

        CCLabelTTF *pLabel = CCLabelTTF::create(pString->getCString(), "Arial", 20.0);
        pLabel->setPosition(CCPointZero);
        pLabel->setAnchorPoint(CCPointZero);
        pLabel->setTag(123);
        pCell->addChild(pLabel);
    }
    else
    {
        CCLabelTTF *pLabel = (CCLabelTTF *)pCell->getChildByTag(123);
        pLabel->setString(pString->getCString());
    }

    return pCell;
}


```




本来是想在tableCellTouched 这里取得对应的精灵,然后点击改变其坐标,但发现这样取不出来,
进到CCTableView的头文件似乎也没找到合适的方法,
求教 下怎么才能取得点击项上的对应的精灵对象呢?:904:
CCTableViewCell *CPaintScene::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
    // 格式化相应的图片名称
    CCString *pString = CCString::createWithFormat("%d.png", idx + 1);
    CCTableViewCell *pCell = table->dequeueCell();// 
    if (!pCell)
    {
        pCell = new CCTableViewCell();
        pCell->autorelease();
        //CCSprite *penSprite = CCSprite::create("building.png");
        CCSprite *penSprite = CCSprite::createWithSpriteFrameName(pString->getCString());
        penSprite->setAnchorPoint(CCPointZero);
        penSprite->setPosition(CCPointZero);
        penSprite->setTag(100);   // 此句


```


因为pCell都是通过 table->dequeueCell返回,而每个pCell都是单独的,或者说每个SPRITE对应一个新的pCell
像我上面写的 pCell->addChild(penSprite, 0, idx);  就等于当成了所有单独的pCell是一个整体,而且每次SETTAG的值都不
同,那在我点击相应的 pCell时,自然就得不到对应的精灵了, 毕竟每个pCell上只有一个SPRITE,所以给其设置相同的TAG,
才能返回其SPRITE对象。 就是这样了,一开始没搞清其概念。