cocos quick lua 输入框点击穿透的问题处理方案。
条件:当前版本quick-3.3 -lua,系统 win7。
问题:在输入框(textField或者editbox,下文“输入框”就代表这两种)打开的情况下弹出其他界面盖住输入框,点击上层界面的时候输入框还会优先响应点击事件,而上层的界面上的其他控件不会响应点击事件。
原因分析:界面上的点击事件使我们自己定义的touch事件,而输入框点击事件是在cpp层quick接受处理的,所以导致我们拦截点击事件也不好处理。
处理方案一:更改Cpp层做成统一的事件监听可以按照层级来顺序监听。
处理方案二:脚本层处理,重新封装UIInput对象使得满足事件监听顺序。
由于老大不让我改引擎代码,让我想办法脚本层处理这个问题。于是我从方案2入手的。
已知输入框是可以通过setTouchEnabled函数屏蔽点击事件的,
于是思路如下,UIInput本来返回一个输入框类型的对象,要满足点击顺序必须使用与lua层点击事件一样的事件处理。因此我需要返回一个可以重写touch事件的界面就Node吧,
先对输入框setTouchEnabled函数上锁,然后通过touch事件来处理来决定是否向下传递点击事件,这个时候需要一个输入框点击函数touchDownAction,往下传递点击事件,传递完毕立即加锁。
点击事件代码如下:
local oTouchNode = display.newNode()
oTouchNode:setContentSize(oSize)
editbox:addTo(oTouchNode)
editbox:setTouchEnabled(false) --输入框加锁
oTouchNode:setTouchEnabled(true)
oTouchNode.editBox = editbox--本来是要返回editbox对象的,现在返回的是oTouchNode
oTouchNode:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
if "ended" == event.name then
--这里可以建判断点击事件是否还在控件中
editbox:setTouchEnabled(true) --解锁
editbox:touchDownAction(editbox, 2)--传递事件
editbox:setTouchEnabled(false) --加锁
end
return true
end)
return oTouchNode
这样会导致一个小问题是我们不能直接访问editbox的方法,为了兼容其他已经写到的地方我们可以把editbox的函数重定向到Node上
当然要搜一下 用到了哪些都加上才行。
就这么多吧,测试可行。第一种方案需引擎优化吧。
最新文章
- 帝国cms内容页调用缩略图的原始尺寸图片
- .Net Enum
- JavaWeb学习笔记——JDOM
- Which is the best opencv or matlab for image processing?
- Kettle使用jndi mssqlserver
- ASIHttpRequest addRequestHeader的处理
- MySQL、SqlServer、Oracle三大主流数据库分页查询
- SSL握手过程
- Excel.Application SaveAs 把excel转换为html
- Java NIO FileVisitor 高效删除文件
- NGUI_Texture
- MySQL 主从复制那些事(一)
- (3)STM32使用HAL库操作外部中断——实战操作
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习4
- Oracle对象(视图、序列、索引)
- bootstrap模态框的调用
- Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件
- dubbo配置清单-超详细版
- WCF *.svc 自定义地址路由映射
- 3.Strings 字符串如何工作?----对缓冲区的理解。
热门文章
- 三.GC相关之三分钟认识GC算法
- kickstart自动化安装--tftp+nfs+dhcp
- PythonTip--一马当先--bfs
- java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析
- Unity 继承MonoBehaviour脚本 执行顺序 详解
- CharMatch(括号匹配)
- React Native 系列(九) -- Tab标签组件
- Android -- AsyncTask源码解析
- .NET并行处理和并发1-Threads and Theading
- 移动端为何不使用click而模拟tap事件及解决方案