问题标签 [isuserinteractionenabled]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
81 浏览

arrays - 使用来自 textviews 数组的 func resign 第一响应者

我的代码使用 didTapAdd 函数向视图控制器添加无穷无尽的文本视图。问题是我不能移动它,因为它是一个文本视图。如果它是标签或图像视图,这将完美地工作。不知何故,我想做一个类似于开关 everttime didtapadd2 的事情,我希望所有的文本视图都不能输入,所以我可以移动它们,然后再次调用 func 以将其关闭。

0 投票
1 回答
476 浏览

ios - swift isUserInteractionEnabled = false 在 UITapGestureRecognizer 内不起作用

我有一个问题,我的主视图中有一个 UIScrollView 和一个 Header (UIView),而我的 Header 位于我的 UIScrollView 之上:

我希望我的标题能够检测到对其的点击,但我也希望我的滚动视图能够在我拖动我的标题时滚动,这现在是不可能的,因为我的标题在它上面并且阻止了滚动。

总而言之,我希望我的 Header 检测到点击但向前滚动到我的 UIScrollView。

为了解决这个问题,我尝试了多种方法,以下是其中一些:

  1. 将 UIPanGestureRecognizer 添加到我的 Header 以便它能够检测到拖动
  2. 将 UITapGestureRecognizer 添加到我的 Header 以便它能够检测到点击
  3. 拖动开始时设置 isUserInteractionEnabled = false 以便可以将手势传递给下一个 UIResponder ,在这种情况下是我的 UIScrollView
  4. 拖动完成后设置 isUserInteractionEnabled = true 以便它可以再次检测到点击

这是代码片段:

在这一点上,我看到如何很好地检测到拖动和点击,但由于某种原因 isUserInteractionEnabled = false 似乎没有改变视图的行为方式。此代码充当 isUserInteractionEnabled 无论如何始终为真。

除此之外我还尝试过的事情:

  • 覆盖 UIButton 中的 hitTest 函数
  • 覆盖 touchesBegan、touchesMoved、touchesEnded 方法覆盖下一个
  • 设置变量以返回 ScrollView 作为下一个 UIResponder
  • 在 UIButton 中设置 isExclusiveTouch 方法
  • 以各种可能的方式更改 isUserInteractionEnabled
0 投票
1 回答
51 浏览

uistackview - 为什么嵌套视图中的 UILabel 不接收触摸事件/如何测试响应者链?

我发现了很多关于不接收触摸事件的类似问题,我知道在某些情况下,可能需要编写自定义的 hitTest 函数——但我还读到响应者链将遍历层次结构中的视图和视图控制器——我不明白为什么我的实现需要自定义 hitTest。

我正在寻找解释和/或指向解释如何测试响应者链的文档的链接。此问题出现在 Xcode 10.2.1 中。

我的场景(我没有使用情节提要):

  • 我有一个 mainViewController,它提供了一个带有 ImageView 和一些标签的全屏视图。我已将 TapGestureRecognizers 附加到 ImageView 和其中一个标签上——它们都可以正常工作。
  • 当我点击标签时,我添加了一个子视图控制器,它作为主视图控制器的子视图。视图被限制为仅覆盖屏幕的右半部分。
  • 子 viewController 包含一个垂直堆栈视图,其中包含 3 个排列的子视图。
  • 每个排列的Subview 都包含一个 Label 和一个水平 StackView。
  • 水平 stackView 的每一个都包含一个带有标签的视图作为子视图。
  • 子视图中的 Label 将其 isUserInteractionEnabled 标志设置为 True 并添加 TapGestureRecognizer。
  • 这些是子 ViewController 中唯一设置了“isUserInteractionEnabled”的对象。

标签嵌套得相当深,但由于这是直接的父/子层次结构(与属于 NavigationController 的 2 个视图相反),我希望标签位于正常的响应程序链中并正常运行。Stack View 会改变这种行为吗?我是否需要在某些视图上将“isUserInteractionEnabled”值显式设置为 False?有没有办法可以将日志记录添加到 ResponderChain,以便我可以查看它检查了哪些视图并找出它被阻止的位置?

在阅读了这篇 StackOverflow 帖子后,我尝试在 viewDidLayoutSubviews() 中添加我的手势识别器,而不是如下所示 - 但它们仍然没有收到点击事件。

提前感谢任何可以提供建议或帮助的人。

这是不响应我的点击事件的标签的代码以及它应该调用的点击事件:

0 投票
0 回答
20 浏览

swift - 仅在 UIView 上而不是在子视图上防止用户交互 - Swift - 以编程方式

我有一个以这种方式创建的 UIView 子类:

我想阻止这个UIView接收事件,所以上网搜索发现可以设置isUserInteractionEnabled = false

使用这种方法,视图不会收到任何事件,它的所有子视图也是如此。

这就是问题所在,如何防止视图接收任何触摸事件,同时仍允许其子视图接收它们?

0 投票
1 回答
60 浏览

ios - 无法在 UIWindow 上添加的 UIView 上禁用 UserInteraction

所以这就是问题所在。我创建了一个自定义加载器,它在中间显示一个基本的“加载”文本,背景变暗。HUD 显示得很好,但尽管设置isUserInteractionEnabledfalse我仍然可以单击添加 HUD 的 UI。这是代码:

用法:Loader.shared.show()Loader.shared.hide()

代码有什么问题?