2017/06/07

```cpp:TestTableView.cpp
//
//  TestTableView.cpp
//  testCocos
//
//  Created by 當眞 良平 on 2017/06/07.
//
//

#include "TestTableView.hpp"

using namespace cocos2d;
using namespace cocos2d::extension;

bool TestTableView::init() {
    if (!Node::init()) {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    
    // Data
    _contents = {
        "a",
        "bc",
        "def",
    };
    
    // TableView
    TableView* tableView = TableView::create(this, Size(visibleSize.width, visibleSize.height));
    tableView->setDirection(TableView::Direction::VERTICAL);
    tableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);
    tableView->setAnchorPoint(Vec2::ZERO);
    tableView->setPosition(Vec2::ZERO);
    tableView->setDelegate(this);
    this->addChild(tableView);
    tableView->reloadData();
    
    return true;
}

cocos2d::Size TestTableView::cellSizeForTable(cocos2d::extension::TableView* tableView) {
    return Size(tableView->getContentSize().width, CELL_HEIGHT);
}

cocos2d::extension::TableViewCell* TestTableView::tableCellAtIndex(cocos2d::extension::TableView* tableView, ssize_t index) {
    TableViewCell* cell = tableView->dequeueCell();
    
    auto text = StringUtils::format("%ld : %s", index, _contents[index % _contents.size()].c_str());
    
    if (cell) {
        CCLOG("%s", ("tableCellAtIndex: T: " + text).c_str());
        auto label = cell->getChildByName<Label*>("label");
        label->setString(text);
    }
    else {
        CCLOG("%s", ("tableCellAtIndex: F: " + text).c_str());
        
        cell = new TableViewCell();
        cell->autorelease();
        
        auto bg = DrawNode::create();
        bg->drawRect(Vec2(0, 0), Vec2(tableView->getContentSize().width, CELL_HEIGHT), Color4F::BLUE);
        

        auto label = Label::createWithTTF(text, "fonts/Marker Felt.ttf", 24);
        label->setAnchorPoint(Vec2::ZERO);
        label->setPosition(Vec2(50, 30));
        label->setColor(Color3B::GRAY);
        label->setName("label");
        cell->addChild(label);
    }
    
    cell->setName(text);
    
    
    return cell;
}

ssize_t TestTableView::numberOfCellsInTableView(cocos2d::extension::TableView* tableView) {
//    return _contents.size();
    return 100;
}

void TestTableView::tableCellTouched(cocos2d::extension::TableView* tableView, cocos2d::extension::TableViewCell* tableViewCell) {
    CCLOG("Touched");
}
```

```cpp:TestTableView.hpp
//
//  TestTableView.hpp
//  testCocos
//
//  Created by 當眞 良平 on 2017/06/07.
//
//

#ifndef TestTableView_hpp
#define TestTableView_hpp

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

#include <vector>

class TestTableView :
                        public cocos2d::Node,
                        public cocos2d::extension::TableViewDataSource,
                        public cocos2d::extension::TableViewDelegate
{
private:
    static const int CELL_HEIGHT = 100;
    
    std::vector<std::string> _contents;
    
public:
    CREATE_FUNC(TestTableView);
    virtual bool init() override;
    
    virtual cocos2d::Size cellSizeForTable(cocos2d::extension::TableView* tableView) override;
    virtual cocos2d::extension::TableViewCell* tableCellAtIndex(cocos2d::extension::TableView* tableView, ssize_t index) override;
    virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView* tableView) override;
    virtual void tableCellTouched(cocos2d::extension::TableView* tableView, cocos2d::extension::TableViewCell* tableViewCell) override;
};


#endif /* TestTableView_hpp */
```