【问题标题】:Multiple levels UIView (xib type) not trigger UITapGestureRecognizer多级 UIView(xib 类型)不触发 UITapGestureRecognizer
【发布时间】:2016-03-11 02:25:31
【问题描述】:

我想动态加载一些UIViews,它们有些复杂,所以我花了几个小时制作了 .xib 文件。

现在假设我有一个finalView,它作为根/容器视图显示在屏幕上。 然后我addSubView(subViewLvOne),也可以是容器视图。 终于subViewOne.addSubView(subViewLvTwo),现在我们得到了所有需要的东西。

在屏幕上它是完美的,正是我想要展示的结果。 TwoOneOnefinal

但我无法使用OneTwo 获得任何点击事件。看来final 得到了所有的事件,但是由于里面有很多小的子视图,我当然希望他们得到自己的事件。

我已经简化了我的真实情况,避免了许多不相关的细节,希望现在描述清楚。

欢迎任何建议,甚至像“使用 *** 比 .xib 更好”。我自己,已经开始怀疑整个解决方案的方向了。

【问题讨论】:

  • 它应该会自动工作,当你点击查看Two时,与之关联的UITapGestureRecognizer应该是有效的。
  • 你设置了 view.userinteractionenabled = true 吗?
  • @SaiCYLi 是的,我已经尝试过 true 和 false ,结合每个 UIView。
  • 尝试 3 个不同的视图向视图控制器添加 3 个不同的操作,你得到了什么结果?

标签: ios swift uiview uibutton uitapgesturerecognizer


【解决方案1】:

大约 2 小时后,我得到了两个提示:

  1. .xib 文件中的根UIView,必须足够大。

我有一个宽度为 200 的UIView,里面有一个UIButton。在运行时,我将UIButton的宽度约束更改为填满屏幕,显然大于200。然后发生了一些荒谬的事情:只有部分按钮可以触发点击事件。在这种情况下,根UIView的宽度,即200像素。

  1. init(frame:CGRect) 时,使宽高值足够大。

首先,我从网上的一些例子中复制了CGRect.Zero。我的同事发现这会阻止点击事件。你可以只给一个1000宽和1000高,外面的区域不会真正触发点击事件,同时UIView可以被正确点击。

就是这样。

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多