TabHeader不能點選的問題

峻峰飛陽發表於2016-09-15

在Cocos2dx最新版本中(cocos2dx3.13)中,增加了控制元件TabControl
例子:

    auto tab = ui::TabControl::create();
    tab->setContentSize(Size(400.f, 400.f));
    tab->setHeaderHeight(100.f);
    tab->setHeaderWidth(200.f);
    tab->setHeaderSelectedZoom(.1f);
    tab->setHeaderDockPlace(ui::TabControl::Dock::TOP);

    auto header1 = ui::TabHeader::create("cross1", "check_box_normal_disable.png", "check_box_active.png");
    header1->setTitleText("background");
    auto header2 = ui::TabHeader::create("cross2", "check_box_normal_disable.png", "check_box_active.png");
    auto header3 = ui::TabHeader::create("cross3", "check_box_normal_disable.png", "check_box_active.png");

    auto container1 = ui::Layout::create();
    container1->setOpacity(255);
    container1->setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
    container1->setBackGroundColor(Color3B::GRAY);
    container1->setBackGroundColorOpacity(255);
    auto container2 = ui::Layout::create();
    container2->setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
    container2->setOpacity(255);
    container2->setBackGroundColor(Color3B::BLUE);
    container2->setBackGroundColorOpacity(255);
    auto container3 = ui::Layout::create();
    container3->setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
    container3->setOpacity(255);
    container3->setBackGroundColor(Color3B::RED);
    container3->setBackGroundColorOpacity(255);

    tab->insertTab(0, header1, container1);
    tab->insertTab(1, header2, container2);
    tab->insertTab(2, header3, container3);

    tab->setSelectTab(2);
    addChild(tab);

但這裡有個問題,如果TabControl加入到包含遮蔽Touch的層中,TabHeader無法點選。
其原因是在函式insertTab中,TabHeader是使用
addProtectedChild(header, -2, -1);
加入到TabControl中的,如果改為addChild就正常了,其深層原因我還沒有仔細研究!

相關文章