条件:当前版本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上

当然要搜一下 用到了哪些都加上才行。

就这么多吧,测试可行。第一种方案需引擎优化吧。

最新文章

  1. 帝国cms内容页调用缩略图的原始尺寸图片
  2. .Net Enum
  3. JavaWeb学习笔记——JDOM
  4. Which is the best opencv or matlab for image processing?
  5. Kettle使用jndi mssqlserver
  6. ASIHttpRequest addRequestHeader的处理
  7. MySQL、SqlServer、Oracle三大主流数据库分页查询
  8. SSL握手过程
  9. Excel.Application SaveAs 把excel转换为html
  10. Java NIO FileVisitor 高效删除文件
  11. NGUI_Texture
  12. MySQL 主从复制那些事(一)
  13. (3)STM32使用HAL库操作外部中断——实战操作
  14. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习4
  15. Oracle对象(视图、序列、索引)
  16. bootstrap模态框的调用
  17. Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件
  18. dubbo配置清单-超详细版
  19. WCF *.svc 自定义地址路由映射
  20. 3.Strings 字符串如何工作?----对缓冲区的理解。

热门文章

  1. 三.GC相关之三分钟认识GC算法
  2. kickstart自动化安装--tftp+nfs+dhcp
  3. PythonTip--一马当先--bfs
  4. java多线程系列(五)---synchronized ReentrantLock volatile Atomic 原理分析
  5. Unity 继承MonoBehaviour脚本 执行顺序 详解
  6. CharMatch(括号匹配)
  7. React Native 系列(九) -- Tab标签组件
  8. Android -- AsyncTask源码解析
  9. .NET并行处理和并发1-Threads and Theading
  10. 移动端为何不使用click而模拟tap事件及解决方案