条件:当前版本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. es6 解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 关于给变量赋值,传统的变量赋值是这样的: var arr = [1,2,3];//把数组的值 ...

  2. 练习半音阶口琴--->>修理推键所感

    我想,自己现在已经是完全迷上口琴了,在最近练习的时候自己发现推键推到最后的时候,推不过去了,以为是摩擦的问题,于是刻了轨道来减少摩擦,但是效果并不是很明显,于是,自己开始起了买新口琴的心,想换个好一点 ...

  3. python爬煎蛋妹子图--20多行代码搞定煎蛋妹子图库

    如果说一个人够无聊的话... 就会做一些十分美(wei)丽(suo)的事情啦哈哈哈... 好的,话不多说,进入正题. 正如标题所示,我们今天的目标很简单: 代码要少,妹子要好. 步骤如下: 1. 首先 ...

  4. 双向lstm-crf源码的问题和细微修改

    别人的源码地址:https://github.com/chilynn/sequence-labeling/ 如果你训练就会发现loss降到0以下,按照他设定的目标函数,loss理论上应该是大于0的,仔 ...

  5. Dubbo负载均衡策略

    在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用. 可以自行扩展负载均衡策略,参见:负载均衡扩展Random LoadBalance 随机,按权重设置随机概率. 在一个截面上 ...

  6. Oracle RAC 实验环境RMAN备份v1.01

    Oracle RAC 实验环境RMAN备份v1.01 环境:RHEL 6.5 + Oracle GI 11.2.0.4 + RAC 11.2.0.4 (2 nodes) 需求:制定RAMN备份策略 版 ...

  7. CLI子命令扩展-插件机制实现

    开发CLI工具过程中,为了便于扩展,将CLI的实现分为基础功能和扩展功能.基础功能包括init.build.lint.publish等伴随工程从初始化到最终发布到生产环境,也即为CLI 的core.扩 ...

  8. 谈一谈EasyUI的TreeGrid的过滤功能

    写在最前面 这个星期一直在纠结easyui的treegrid的过滤功能,原因呢,自然是项目中一个莫名奇妙的需求. easyui虽说是后端程序员的前端框架,但是说句实话,除去api,让我直接写里面的节点 ...

  9. Java 库:为 Java 程序员而生的 10 + 最佳库

    众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...

  10. android项目数据库升级跨版本管理解决方案

    目前公司android项目普遍使用框架对数据库进行操作,数据库表与数据实体都具有严格的对应的关系,但是数据库的升依赖不同版本间的升级脚本,如果应用跨多版本进行升级时,当缺失部分升级脚本时就会导致应用异 ...