zoukankan      html  css  js  c++  java
  • CCTableView的使用和注意事项

    #include "cocos-ext.h"
    using namespace cocos2d::extension;
    
    class TableViewTestLayer: public CCTableViewDataSource, public CCTableViewDelegate
    {
    public:
    	///////////////////////////////////////////////////////////////////////////////////////////
    	// CCScrollViewDelegate
    	virtual void scrollViewDidScroll(CCScrollView* view){}
    	virtual void scrollViewDidZoom(CCScrollView* view){}
    	// CCTableViewDelegate
    	//点击响应
    	virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell){}
    	//设置按下时高亮
    	virtual void tableCellHighlight(CCTableView* table, CCTableViewCell* cell){}
    	//设置松开是取消高亮
    	virtual void tableCellUnhighlight(CCTableView* table, CCTableViewCell* cell){}
    	//循环使用某个单元格
    	virtual void tableCellWillRecycle(CCTableView* table, CCTableViewCell* cell){}
    	// CCTableViewDataSource
    	//每一项的大小
    	virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx);
    	//每一项的内容
    	virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
    	//一共多少项
    	virtual unsigned int numberOfCellsInTableView(CCTableView *table);
    	///////////////////////////////////////////////////////////////////////////////////////////
    
    protected:
    	CCTableView *mTableView;
    };
    

      

    //
    mTableView = CCTableView::create(this, CCSizeMake(616, 551));
    //设置左右滑动 或上下
    mTableView->setDirection(kCCScrollViewDirectionVertical);
    //
    mTableView->setPosition(ccp(12, 851-770));
    mTableView->setDelegate(this);
    //index0123...由上到下放置
    mTableView->setVerticalFillOrder(kCCTableViewFillTopDown);
    mBg->addChild(mTableView);
    
    
    
    
    //
    CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table, unsigned int idx)  
    {  
        CCTableViewCell *pCell = table->dequeueCell();  
        if (! pCell ) 
        {  
            pCell = new CCTableViewCell();  
            pCell ->autorelease();  
    
            //添加该项内容、、、、
        }
        else
        {
            //该项已有内容,服用之前滑出可视区域的tablecell,要么全部移除重新添加,要么自己更新、、、、
        }
    }
              
     
    

      

    值得注意的是:

    1. tableView在setVerticalFillOrder时会reloadData;

    void CCTableView::setVerticalFillOrder(CCTableViewVerticalFillOrder fillOrder)
    {
        if (m_eVordering != fillOrder) {
            m_eVordering = fillOrder;
            if (m_pCellsUsed->count() > 0) {
                this->reloadData();
            }
        }
    }

    所以--->要是在tableCellAtIndex中使用tableView的parent,记得先parent->addchild(tableveiw);再setVerticalFillOrder

    2.tableView在create的时候,就会预加载一下tableCell,调用updateCellAtIndex,下面是调用CCTableView::create的调用堆栈

    所以--->要是在updateCellAtIndex中涉及到tableView的parent调用,程序就会蹦掉、

    所以最好将create出来的tableView保存为成员变量,然后在updateCellAtIndex中判断一下

    	CCTableViewCell *cell = table->dequeueCell();
    
    	if (cell == NULL)
    	{
    		cell = new CCTableViewCell();
    		cell->autorelease();
    	}
    	else
    	{
    		cell->removeAllChildren();
    	}
    
            //如果不是create保存的成员变量(即此时调用的updateCellAtIndex是在create是预加载调用的),则不要涉及到parent的操作。
    	if (table != mTableView) return cell;
    

      

  • 相关阅读:
    English trip V1
    English trip M1
    every day a practice —— morning(5)
    English Voice of <<All Of Me>>
    bzoj 3561 DZY Loves Math VI
    luogu P4322 [JSOI2016]最佳团体
    luogu P3264 [JLOI2015]管道连接
    bzoj 5084 hashit
    luogu P6091 原根
    bzoj 5206 [Jsoi2017]原力
  • 原文地址:https://www.cnblogs.com/songcf/p/3524074.html
Copyright © 2011-2022 走看看