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

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

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

cocos quick lua 输入框点击穿透的问题处理方案。的更多相关文章

  1. 点击穿透问题(http://www.tuicool.com/articles/6NfaUnM)

    一.click与300ms延迟 移动浏览器提供一个特殊的功能:双击(double tap)放大 300ms的延迟就来自这里,用户碰触页面之后,需要等待一段时间来判断是不是双击(double tap)动 ...

  2. hitTest:withEvent:方法(此方法可实现点击穿透、点击下层视图功能)

    此方法可实现点击穿透.点击下层视图功能 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIAppl ...

  3. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  4. pointer-events属性屏蔽鼠标事件(点击穿透上层元素)

    应用场景 我们在 HTML 开发时可能会遇到这样的情况:页面上有一些元素使用绝对定位布局,这些元素可能会遮盖住它们位置下方的某个元素的部分或者全部.默认情况下,下方元素被遮挡的部分是不会响应鼠标事件的 ...

  5. 微信小程序弹出层点击穿透问题

    问题描述:使用小程序的modal组件实现遮罩层效果时,会出现滚动穿透的问题,即遮罩层后面的页面依旧可以滚动. 解决方案: 给底层页面动态添加 position:fixed; 代码: wxml: < ...

  6. IE8 没有内容的盒子,如果有定位,浮现在其他盒子上 可能会有点击穿透没有作用的情况

    IE8 没有内容的盒子,如果有定位,浮现在其他盒子上 可能会有点击穿透没有作用的情况

  7. 说说移动端web开发中的点击穿透问题

    最近一直在忙于一个无线端的项目,由于之前主要工作都是在桌面端,移动端接触的比较少,所以中间遇到了很多的坑,做一个简单的记录. 问题背景 需求中有这样的一个功能,点击取件信息的时候会弹出一个地址列表的浮 ...

  8. document.onclick在ios上不触发的解决方法与touchstart点击穿透处理

    document.onclick = function (e) { var e = e ? e : window.event; var tar = e.srcElement || e.target; ...

  9. UGUI 点击穿透问题

    unity上 用 做游戏欢迎界面上通用的ui,然后导到游戏里面直接用,但发现游戏里面是用ngui的,点击ugui 的ui 会穿透过去 ngui会响应,原本模型的点击处理也会响应 我用的 unity 版 ...

随机推荐

  1. Linux修改网卡名称、主机名

    Linux修改网卡名称.主机名 环境:VirtualBox 5.0.14 + RHEL 6.5 需求:个人实验搭建一套Standby RAC时,为了节约时间,直接复制之前安装RAC的主机模板. 但复制 ...

  2. .NET MVC与三层架构

    虽然接触了两者有一段时间了,但是有时还是会混淆概念,在此处不打算说明二者的区别,因为二者都是架构模式,并且也有一定的共存度,在实际开发中,严格区分意义不大.基于最近涉及到这部分知识就在复习下,编程过程 ...

  3. MAC上安装EndNote破解版的链接文件 以及某些安装好后有可能替换执照文件的方法

    一款非常好用的论文写作软件不多形容,开整: X7 mac版本(非免破解版本)链接: 点击我 X8 mac版本(大客户版本,免破解非常好用) 点击我 X8 windows版本(大客户版本,免破解非常好用 ...

  4. python教程6-3:排序

    (a).输入一串数字.并从大到小排列. (b).跟a一样,不过要用字典序从大到小排列. python35 PaiXu_6_3.py PaiXu_6_3.py #coding=utf-8 import ...

  5. Hadoop新生报到(一) hadoop2.6.0伪分布式配置详解

    首先先不看理论,搭建起环境之后再看: 搭建伪分布式是为了模拟环境,调试方便. 电脑是win10,用的虚拟机VMware Workstation 12 Pro,跑的Linux系统是centos6.5 , ...

  6. VMware NAT端口映射 外网可以访问内网虚拟机

    我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...

  7. 使用纯css3写出来的表情包 (^v^)

    效果如图所示: 不多说,我们直接一个一个来写出,主要列出每个表情的结构,样式我们统一写出,基本全部会用到,颜色以及结构可以根据自己的需求来调整.(里面可是没有一张图片的哦) 页面预览:http://2 ...

  8. node中使用es6/7/8 --- 支持性与性能

    前言 这几年react.vue的快速发展,越来越多的前端开始讲es6的代码运用在项目中,因为我们可以通过babel进行转译为低版本的js以便于运行在所有浏览器中,import.export.let.箭 ...

  9. 多系统重装其中Win7后的启动引导列表恢复

    重装Win7后会导致原grub引导被覆盖,要修复grub需要一张Ubuntu的LiveCD(安装光盘),用LiveCD启动电脑,进入Try Ubuntu(试用Ubuntu),进入之后打开终端,做如下几 ...

  10. 轻松学JVM(二)——内存模型、可见性、指令重排序

    上一篇我们介绍了JVM的基本运行流程以及内存结构,对JVM有了初步的认识,这篇文章我们将根据JVM的内存模型探索java当中变量的可见性以及不同的java指令在并发时可能发生的指令重排序的情况. 内存 ...