如何获得子节点下的子节点

例如我要获得子节点的控件(假设是个Label)
auto rootNode = CSLoader::createNode(“XXXXX.csb”);
auto label= (ui::Label*)rootNode->getChildByName(“XXXXX”);

假如这个Label下有一个Button的子节点,那应该怎么获得呢?难道要先获得Label,再用label->getChildByName(“XXXXX”)?

恩,是要先获得Label,再用label->getChildByName(“XXXXX”):7::7:

不用那么麻烦,每次都要获取字节点再去获取子节点的字节点。你有个根节点就够了,然后通过这个函数,只要知道某个节点的名字,就可以获取。

Node* seekNodeByName(Node* root, const std::string& name)
{
if (!root)
{
return nullptr;
}
if (root->getName() == name)
{
return root;
}
const auto& arrayRootChildren = root->getChildren();
for (auto& subWidget : arrayRootChildren)
{
Node* child = dynamic_cast<Node*>(subWidget);
if (child)
{
Node* res = seekNodeByName(child, name);
if (res != nullptr)
{
return res;
}
}
}
return nullptr;
}

这是哪里的函数?我3.4里面就没找到…

应该不是3.4,我书上就是用这种方法的,(Button*)Helper::seekWidgetByName(UI,“xxxxx”);

这个接口不是-X的,JSB和Quick好像有。-X的话倒是可以自己实现一个类似的。

这个不是源码里的函数,是自己添加进去的算法。。。遍历树获取子节点。。。
使用时要进行转换。。。例如:
auto btn = statci_cast<Button *>(seekNodeByName(root, “button_1”));

只要知道根节点就可以获取任意子节点,非常方便,你也可以自己改成通过target获取。

studio有这个接口,get控件用的

这个源码函数里有。。。在ui.helper 类里。。。