中易网

嵌套布局怎么监听控件事件

答案:2  悬赏:40  
解决时间 2021-02-11 14:49
嵌套布局怎么监听控件事件
最佳答案
所有Widget类型的节点都支持addTouchEventListener和addClickEventListener这两个接口。可以通过些接口来接收触摸事件。   addTouchEventListener的使用步骤如下(C++):   1)准备好你的widget节点,在编辑器中开启交互(或在代码中setTouchEnabled(true))。   2)定义一个函数,形式如下   void ACuteClass::onTouchEvent(cocos2d::Ref *ref, Widget::TouchEventType touchType)   {   switch(touchType)   {   case Widget::TouchEventType::BEGAN:   CCLOG("on began");   break;   case Widget::TouchEventType::MOVED:   CCLOG("on moved");   break;   case Widget::TouchEventType::ENDED:   CCLOG("on ended");   break;   case Widget::TouchEventType::CANCELED:   CCLOG("on canceled");   break;   default:   CCLOG("impossible");   }   }   3)把这个函数传递给addTouchEventListener接口:   1   your_widget->addTouchEventListener(CC_CALLBACK_2(ACuteClass::onTouchEvent, this));//CC_CALLBACK_2照着写,表示有两个参数的回调。   ok搞定。   addTouchEventListener的使用方法一样,不同的地方是:回调函数onTouchEvent在一次触摸中只回调一次,触发ENDED时回调。   关于点击没响应的可能:   没开启交互。   控件被挡住。   其他细节   1. 如何获取触摸事件的坐标   用下面这几个接口:   getTouchBeganPosition   getTouchMovePosition   getTouchEndPosition   看名字就知道获取的是什么了吧。   2. 关于ScrollView在某些情况下点到子控件不能拖动的问题   现在的Studio支持同时创建widget和非Widget类型的节点。这样会有一个问题。   Widget类型接受到触摸事件时,会把这些事件向上层传递,但是在遇到非Widget节点时会停下来。这会导致点击ScrollView等View类中的控件(两者之间有node)拖动时,拖动失败。   解决方案:   设置View中的控件的SwalloTouches属性为false。使控件不截断touch事件   改下源码:将如下代码替换掉Widget中同名函数。      void Widget::propagateTouchEvent(cocos2d::ui::Widget::TouchEventType event, cocos2d::ui::Widget *sender, cocos2d::Touch *touch)   {   Widget *widgetParent = nullptr;   for(Node *p = this;widgetParent == nullptr;)   {   p = p->getParent();   if(p)   {   widgetParent = dynamic_cast(p);   }   else   {   return;   }   }   widgetParent->interceptTouchEvent(event, sender, touch);   }   ui::TextField   类似于addTouchEventListener   1.设置交互或者setTouchEnabled(true)   2.编写一个监听函数:      void yourClass::textFieldEvent(Ref *pSender, TextField::EventType type)   {   switch (type)   {   case TextField::EventType::ATTACH_WITH_IME:   CCLOG("获得输入焦点");   break;   case TextField::EventType::DETACH_WITH_IME:   CCLOG("获得输入焦点");   break;   case TextField::EventType::INSERT_TEXT:   CCLOG("输入了文本");   break;   case TextField::EventType::DELETE_BACKWARD:   CCLOG("获得输入焦点");   break;   default:   break;   }   }   3.设置监听:      yourTextField->addEventListener(CC_CALLBACK_2(yourClass::textFieldEvent, this));
全部回答
任务占坑
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
五菱宏光 1.2排量拉一千斤能 跑起来吗
郑州中心站到平顶山的大巴都是几点的?
拉利钢管厂我想知道这个在什么地方
x-15%x=42.5
写秋天杨树的好段摘抄
怎么退高考录取档案
跟脚有关的四字词语100个要减单
河南中医学院第一附属医院可以做人工受孕吗
华东招待所在哪里啊,我有事要去这个地方
胜达小区北门地址在什么地方,想过去办事
龙之谷截图
博罗县福田镇双拥办公室地址有知道的么?有点
老师该如何对待学生打招呼
后会无期,此刻优伤也是快乐,落泪也只是为了
那豆大的泪珠从明亮的大眼睛中滚落下来,怎样
推荐资讯
光荣厂大量招工我18岁,没有进过厂,有没有适
机关事务管理局 和 接待办 哪个好
你好,我想搞个小型加工厂
计算题2米20厘米+4米7分米 怎样做
连云港十五天天气情况
110平房子适合多少匹空调
尉氏那个厂现在在招工
已知:如图4,直线AB∥CD,直线EF分别交AB
暮光之城中贝拉的女儿有特殊能力吗
江苏省涟水县前进镇卫生院地址好找么,我有些
神作不完全点名 高达的歌曲http://v.youku.co
请问下图上的小妞是哪个电视剧或者电影里的角
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?