如何让 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 启用?