如何让 UISwitch 或 UITextField 响应 UITapGestureRecognizer 而无需分别切换/进入编辑模式?

Posted

技术标签:

【中文标题】如何让 UISwitch 或 UITextField 响应 UITapGestureRecognizer 而无需分别切换/进入编辑模式?【英文标题】:How do I get a UISwitch or UITextField to respond to a UITapGestureRecognizer without switching/going into edit mode respectively? 【发布时间】:2012-04-16 09:38:25 【问题描述】:

我有一个自定义 UIViewController,我的所有 ViewController 都继承自。在这个控制器上,我有一个 UITapGestureRecognizer。我还有一个名为 inHelpMode 的布尔属性。

这个想法是,当视图处于帮助模式时,点击一个控件会弹出一个弹出窗口,其中包含有关控件功能的信息。

这适用于大多数控件,但有两个值得注意的例外:UISwitch 和 UITextField。

第一个切换,第二个进入编辑模式。

当我进入帮助模式时,我尝试在这些控件上将启用设置为 NO,这会阻止控件响应,但也会阻止显示弹出窗口。将 Controller 设置为 UItextField 的委托并覆盖 textFieldShouldBeginEditing 时也会发生同样的情况。

【问题讨论】:

【参考方案1】:

尝试在进入编辑模式时将 UISwitch 和 UITextField 的 userInteractionEnabled 设置为 NO。离开帮助模式时不要忘记将其设置回 YES。如果这可行,那么一定是因为即使启用设置为 NO,这两个控件仍会进行一些触摸处理。通过将 userInteractionEnabled 设置为 NO,您将在 UIView 级别禁用它们,因此希望这会导致它们忽略点击手势。

【讨论】:

当我将 userInteractionEnabled 设置为 NO 时,控件不再对点击手势做出反应以显示弹出框。 您是否只在包含所有这些控件的视图中添加了一个点击手势?或者在每个控件上点击手势?如果它只是一个点击手势,你会做一些计算来检测点击位置是否在任何控件的范围内? 我的所有视图都继承自基础视图类,这只是一个轻击手势。我在 tap 方法上调用 hitTest,然后将控件的标记与包含弹出消息的列表进行比较。

以上是关于如何让 UISwitch 或 UITextField 响应 UITapGestureRecognizer 而无需分别切换/进入编辑模式?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何使用 UISwitch 控制 UITextField 通过委托启用或禁用

如何在 RxSwift 中将 UISwitch 绑定到 UIButton 启用?

如何以编程方式切换uiswitch按钮

如何使任意 UIAccessibilityElement 的行为类似于 VoiceOver 的 UISwitch?

在 UITests 中获取 UISwitch 状态/值

保存多个 UISwitch 状态不同的 Views