首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有touchUpInside的UIButton选择器在使用Swift 4的嵌套UIViews中不起作用

的原因可能是事件传递和响应链的问题。当一个按钮被点击时,事件会从按钮开始向上传递,直到找到能够处理该事件的视图为止。在嵌套的UIViews中,可能存在多个视图层级,导致事件传递被阻断或者被其他视图处理。

解决这个问题的方法有以下几种:

  1. 确保按钮的交互性已启用:在嵌套的UIViews中,确保按钮的isUserInteractionEnabled属性设置为true,以确保按钮可以接收用户交互事件。
  2. 检查视图层级关系:确保按钮位于正确的视图层级中,即按钮不会被其他视图遮挡或者被添加到错误的父视图中。
  3. 检查事件处理方法:确保按钮的touchUpInside事件已正确绑定到相应的处理方法上,并且处理方法的实现正确。
  4. 检查事件传递和响应链:在嵌套的UIViews中,可能存在多个视图层级,导致事件传递被阻断或者被其他视图处理。可以通过重写父视图的hitTest方法或者重写子视图的point(inside:with:)方法来调整事件传递和响应链。

总结起来,解决带有touchUpInside的UIButton选择器在使用Swift 4的嵌套UIViews中不起作用的问题,需要确保按钮的交互性已启用,检查视图层级关系,检查事件处理方法,以及检查事件传递和响应链。如果问题仍然存在,可能需要进一步调试和排查代码逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

史上最详细的iOS之事件的传递和响应机制-实践篇

之前我已经通过《史上最详细的iOS之事件的传递和响应机制-原理篇》比较详细的介绍过了事件的响应和传递的一些原理。如果说上篇是原理性文章,那么本篇文章更偏重于实践。本篇文章主要介绍如何利用事件处理的这些机制来处理公司开发中一些比较棘手的需求。例如,点击的是A视图,却要让B视图处理事件;点击子视图,却要让父视图处理事件等等。今天,我整理了下之前的杂记,罗列出了一些开发中可能遇到的情景和应对措施!当然,这要求我们对事件的传递和响应机制非常了解。如果对此不太了解,请阅读笔者的《史上最详细的iOS之事件的传递和响应机制-原理篇》。

02

Event官方文档

当系统传递一个touch event,首先会send到一个特定的view。对于touch view来讲,这个view就是被hitTest:withEvent:返回的view;对于shaking-motion event,remote-control事件,action messages,和editing-menu message, view就是firstResponder。如果initial view没有处理event,他就会沿着响应链去查找,顺序为: a) hit-test view或者firstResponder会传递event或者message到它的vc上(如果有的话);如果没有vc,则将event或者message传到superView上 b) 如果view或者vc不能handle event或者message,会传到view的superview上。 c) 之后的所有superView会根据a、b的模式进行传输,如果无法handle的话 d) view树的最上层的view,如果无法handle event或者message,会把event send到window对象 e) 如果UIWindow对象无法handle的话,会传递到application对象单例上 f) 如果application单例无法处理event或者message,则discards。

02
领券