きょこみのーと

技術に関係ないほうのブログ

CocoStudioで深い階層にあるButtonとかを楽に取得するUtilつくった

f:id:kyokomi:20140621120956j:plain

上記ような、階層が深い時に普通にgetChildByNameしても取得できません。

めんどくさいけど、以下のように全部指定すれば一応とれます。

auto layout = GUIReader::getInstance()->widgetFromJsonFile("xxxxxx.json");

auto button = dynamic_cast<Button*>(layout->getChildByName("fotter_menu_panel")->getChildByName("fotter_menu_1_0")->getChildByName("fotter_button_0"));

順番把握しないといけないし、間違えたらヌルポだしこれは辛いので以下のUtil作りました。

使い方

xxxxxx.jsonは、各自UIEditorで作成してExportしたもの。

auto layout = GUIReader::getInstance()->widgetFromJsonFile("xxxxxx.json");
auto button = dynamic_cast<Button*>(WidgetUtil::getChildByNameRecursion(layout, "fotter_button_0"));
button->addTouchEventListener([](Ref *ref, Widget::TouchEventType type) {
    if (type == Widget::TouchEventType::ENDED) {
        // 処理
        CCLOG("fotter_button_0 touch ended.");
    }
});