

auto myLayout = dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("CJDHMainUI_1/CJDHMainUI_1.json"));
auto gamestartBtn = dynamic_cast<Button*>(Helper::seekWidgetByName((Widget*)rootNode,"gameStart_Button"));
而在mac系统下的cocos studio使用下边的加载方法加载资源:
Node* rootNode =cocostudio::timeline::NodeReader::getInstance()->createNode("CJDHMainUI/CJDHGameUI.json");
this->addChild(rootNode,0);
auto homeBtn = dynamic_cast<Button*>(rootNode->getChildByName("Button_home"));
homeBtn->addTouchEventListener(CC_CALLBACK_2(GameSelectLayer::touchEvent, this));
这里很明显可以看出来,一个是Layout对象,一个是Node对象。
在使用ListView时也有一些不一样。因为ListView只能添加Layout对象,不能添加Node的非Widget对象。所以,使用mac下的编辑器的时候,一定要从Node这个对象下边取出Layout对象加进ListView才行。今天研究半天了,总算是把这个搞明白了。
比如,我在使用一个新的画布编辑了一个ListView的Cell子项,当你想使用Widget的clone()时发现会报错。一直没有搞懂,直到最后豁然开朗了。请看下边加载的方法。
ListView* lv = dynamic_cast<ListView*>(rootNode->getChildByName("ListView_main"));
lv->setDirection(ui::ScrollView::Direction::VERTICAL);
lv->setBounceEnabled(true);
//这个方法得到的是Node并不是Layout所以不能使用clone.
Node* wid = cocostudio::timeline::NodeReader::getInstance()->createNode("CJDHMainUI/CCJDHTableCellUI.json");
//从Node中取出Layout对象,这个时候才可以使用clone
Layout* out = dynamic_cast<Layout*>(wid->getChildByName("Panel"));
lv->addChild(out->clone());
经过这一翻折腾,总算是问题解决了。今天遇到这一堆的问题,又开始让我有怀念起苹果的TableView了。虽然这个用起来没有cocos2d-x新出的这个ListView编辑器方便,但显示速度快,不会卡顿,并且使用方法从来都没有改变过,所有的api也始终如一。其实有的时候新工具不一定就能增加工作效率,大部分的时间都用在了学习新工具上了。那就没有时间来作产品设计了。如果其他人愿意,我宁愿用回cocos2d-x 2.1.5这个版本,或者使用cocos2d-iphone的Objective-C的原始版本,不使用任何UI编辑器,一切都用代码来写。但有时候作事情不由自已,谁让咱是给别人打工的码农呢。
下边是,加载正常的ListView.有了这个之后,我们对ListView中的各个控件操作起来也会方便很多。

害死人的编辑器。一个工具还没有开始上手,新的东西又出来了,使用方法还完全不一样。如果我是老板,我宁愿自已打造自已的编辑器。