Use of TableView in Cocos2d-x3.1

Source: Internet
Author: User

Use of TableView in Cocos2d-x3.1
1. First, check the header file of TableView.

# Include "cocos2d. h "# include" extensions/cocos-ext.h "// header file containing TableView # include" ItemAdapter. h "// adaption class USING_NS_CC; // Event Callback function typedef std: function
 
  
MenuCallBack; // inherited class MenuTableView: public cocos2d: Layer, public cocos2d: extension: TableViewDataSource, public cocos2d: extension: TableViewDelegate {public: CREATE_FUNC (MenuTableView ); virtual bool init (); virtual void scrollViewDidScroll (cocos2d: extension: ScrollView * view) {}; // slide virtual void scrollViewDidZoom (cocos2d: extension: ScrollView * view) {}; // enlarge virtual void tableCellTouched (cocos2d: extension: TableView * table, cocos2d: extension: TableViewCell * cell); // touch event virtual cocos2d :: size tableCellSizeForIndex (cocos2d: extension: TableView * table, ssize_t idx); // Cell Size virtual cocos2d: extension: TableViewCell * tableCellAtIndex (cocos2d: extension :: tableView * table, ssize_t idx); // Add Cell virtual ssize_t numberOfCellsInTableView (cocos2d: extension: TableView * table); // set the number of cells void touchEvent (cocos2d :: ref * pSender, cocos2d: ui: Widget: TouchEventType); // touch event void addMenuTouchEvent (const menuCallBack & callback); // callback function Size winSize; cocos2d :: ref * _ pSender; cocos2d: ui: Widget: TouchEventType _ type; menuCallBack _ menuCallBack; std: vector
  
   
Item; std: vector
   
    
ItemIcon ;};
   
  
 

# Include "MenuTableView. h "# include" ui/CocosGUI. h "# include" HomeLayer. h "USING_NS_CC; USING_NS_CC_EXT; // declaration containing the cocos-ext.h header file using namespace ui; bool MenuTableView: init () {bool bRet = false; do {CC_BREAK_IF (! Layer: init (); log ("MenuTableView"); // item must be defined first // set the Item name and background item. push_back ("progress"); item. push_back ("yoy"); item. push_back ("period-over-period"); item. push_back ("Product Line"); item. push_back ("ranking"); itemIcon. push_back ("home_list_bg_jindu.png"); itemIcon. push_back ("home_list_bg_tongbi.png"); itemIcon. push_back ("home_list_bg_huanbi.png"); itemIcon. push_back ("home_list_bg_chanpinxian-.png"); itemIcon. push_bac K ("home_list_bg_paiming-.png"); winSize = Director: getInstance ()-> getWinSize (); // create TableView object TableView * tableView = TableView: create (this, size (winSize. width, winSize. height * 6/7); tableView-> setDirection (cocos2d: extension: ScrollView: Direction: VERTICAL); // set TableView to tableView-> ignoreAnchorPointForPosition (false ); tableView-> setAnchorPoint (Vec2: ZERO); // you can set the anchorpoint tableView-> setPosition (Vec2: Z ERO); // set the location tableView-> setVerticalFillOrder (TableView: VerticalFillOrder: TOP_DOWN); // set TableView attributes tableView-> setDelegate (this ); // set the delegate this-> addChild (tableView); tableView-> reloadData (); // update the data this-> setTouchEnabled (true); // The touchable bRet = true ;} while (0); return bRet;} // Item touch event void MenuTableView: tableCellTouched (cocos2d: extension: TableView * table, cocos2d: extension: TableViewCell * cell) {log ("ce Ll touched at index % zd ", cell-> getIdx ();} // set the Cell Size MenuTableView: tableCellSizeForIndex (cocos2d: extension: TableView * table, ssize_t idx) {return Size (winSize. width, winSize. height/6);} // Add CellTableViewCell * MenuTableView: tableCellAtIndex (cocos2d: extension: TableView * table, ssize_t idx) {TableViewCell * cell = table-> dequeueCell (); if (! Cell) {cell = new TableViewCell (); cell-> autorelease ();} cell-> removeAllChildrenWithCleanup (true); log ("idx = % zd", idx ); auto menu = ItemAdapter: create (); // adaptation Class menu-> itemIcon-> loadTexture (itemIcon. at (idx); // Add Icon menu-> itemName-> setString (item. at (idx); // Add Text menu-> touchBtn-> setTag (10 + idx); menu-> setContentSize (Size (winSize. width, winSize. height/8); // set the View Size log ("menu. width = % lf, menu. height = % lf ", menu-> getContentSize (). width, menu-> getContentSize (). height); menu-> setSize (Size (winSize. width, winSize. height/8); // set the size menu-> setLayoutType (cocos2d: ui: Layout: Type: RELATIVE ); // set the layout type menu-> ignoreAnchorPointForPosition (false); menu-> setAnchorPoint (Vec2: ZERO); // set the anchmenu-> touchBtn-> addTouchEventListener (CC_CALLBACK_2 (MenuTableView:: touchEvent, this); // sets the Item touch event cell-> addChild (menu); return cell;} // sets the number of cells ssize_t MenuTableView: numberOfCellsInTableView (cocos2d :: extension: TableView * table) {return 5;} void MenuTableView: touchEvent (cocos2d: Ref * pSender, cocos2d: ui: Widget: TouchEventType type) // callback function, execute HelloWorld. cpp touch event {if (_ menuCallBack) _ menuCallBack (pSender, type);} // assign a value to _ menuCallBack. callback is HelloWorld. touchEvent event void MenuTableView in cpp: addMenuTouchEvent (const menuCallBack & callback) {_ menuCallBack = callback ;}

2. Tool class: Adaptation
#include "cocos2d.h"#include "ui/CocosGUI.h"USING_NS_CC;using namespace ui;class ItemAdapter : public Layout{public:    CREATE_FUNC(ItemAdapter);    virtual bool init();        void touchEvent(cocos2d::Ref *pSender, cocos2d::ui::Widget::TouchEventType type);        ui::Text* itemName;    ui::ImageView* itemIcon;    ui::ImageView* bgImage;    ui::Button* touchBtn;};

#include "ItemAdapter.h"#include "VisibleRect.h"bool ItemAdapter::init(){    bool bRet = false;    do {        CC_BREAK_IF(!Layout::init());        auto winSize = Director::getInstance()->getWinSize();        itemIcon = ui::ImageView::create();//Icon        itemIcon->setScaleY(VisibleRect::getImageScaleY());        itemIcon->setScaleX(VisibleRect::getImageScale());        itemIcon->ignoreAnchorPointForPosition(false);        itemIcon->setAnchorPoint(Vec2(0.5,0.5));//        itemIcon->setPosition(VisibleRect::center());                auto rIcon = RelativeLayoutParameter::create();        rIcon->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT);        itemIcon->setLayoutParameter(rIcon);        addChild(itemIcon);                itemName = ui::Text::create();//Text        itemName->ignoreAnchorPointForPosition(false);        itemName->setAnchorPoint(Vec2(0.5,0.5));        itemName->setFontSize(80 * VisibleRect::getImageScale());        itemName->setColor(Color3B(128,128,128));                auto rprogress = RelativeLayoutParameter::create();        rprogress->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL);        rprogress->setMargin(Margin(90*VisibleRect::getImageScale(),0,0,0));        itemName->setLayoutParameter(rprogress);        addChild(itemName);                bgImage = ui::ImageView::create("home_list_jiantou.png");        bgImage->setScaleY(VisibleRect::getImageScaleY());        bgImage->setScaleX(VisibleRect::getImageScale());        bgImage->ignoreAnchorPointForPosition(false);//        into->setTag(PrograssBtn_Tag+i);        bgImage->setAnchorPoint(Vec2(0.5,0.5));                auto rinto = RelativeLayoutParameter::create();        rinto->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_CENTER_VERTICAL);        rinto->setMargin(Margin(0,0,90*VisibleRect::getImageScale(),0));        bgImage->setLayoutParameter(rinto);        addChild(bgImage,0);                auto stencil = ui::ImageView::create("home_list_bg_jindu.png");                touchBtn = Button::create("touming.png");        log("itemsize.w = %lf,itemsize.h = %lf",stencil->getSize().width,stencil->getSize().height            );        log("touchBtn.x = %lf,touchBtn.y = %lf",touchBtn->getSize().width,touchBtn->getSize().height            );        auto width = stencil->getSize().width * VisibleRect::getImageScale();        auto height = stencil->getSize().height * VisibleRect::getImageScaleY();                touchBtn->setScaleX(width / touchBtn->getSize().width);        touchBtn->setScaleY(height / touchBtn->getSize().height);        touchBtn->ignoreAnchorPointForPosition(false);        //        into->setTag(PrograssBtn_Tag+i);        touchBtn->setAnchorPoint(Vec2(0.5,0.5));        //        touchBtn->setEnabled(true);                auto rtouchBtn = RelativeLayoutParameter::create();        rtouchBtn->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT);        rtouchBtn->setMargin(Margin(0,0,0,0));        touchBtn->setLayoutParameter(rtouchBtn);        addChild(touchBtn,1);                bRet = true;    }while(0);    return bRet;}
Add the following code to HelloWorld. cpp:
        auto menuTableView = MenuListView::create();        menuTableView->ignoreAnchorPointForPosition(false);        menuTableView->setAnchorPoint(Vec2::ZERO);        menuTableView->setContentSize(Size(winSize.width, winSize.height/7*6));        menuTableView->setPosition(Vec2::ZERO);        addChild(menuTableView);                menuTableView->addMenuTouchEvent(CC_CALLBACK_2(HomeWorld::touchEvent,this));

void HomeLayer::touchEvent(Ref *pSender,cocos2d::ui::Widget::TouchEventType type){    auto* btn = dynamic_cast
 
  ( pSender);    switch (type) {        case cocos2d::ui::Widget::TouchEventType::ENDED:        {            switch (btn->getTag()) {                                case DayReport_Tag:                                    {                    log("1");                }                    break;                        case PrograssBtn_Tag:                                    {                    log("2");                }                    break;                case SameBtnCompare_Tag:                {
  
                    log("3");
} break; case RingCompare_Tag: {
                    log("4");
} break; case ProductLine_Tag: {
                    log("5");
} break; default: break; } } break; default: break; }}

  



Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.