【问题标题】:Generic way to detect a touch outside UIView frame检测 UIView 框架外触摸的通用方法
【发布时间】:2013-04-30 07:38:27
【问题描述】:

我有 UIViewController,里面有一个自定义的 UIView(我们称它们为 VC 和按钮)。当按钮被触摸时,它的边界和中心随着动画的变化而变化(它变得更大并提供一些可供选择的选项,选择后它会重新调整大小)。我想知道如何“检测”(并取消该触摸的默认操作)按钮外部的触摸(只是“隐藏”按钮,特别是使按钮调整为默认较小的尺寸)。

有什么通用的方法可以做到这一点吗? VC 的视图中有很多对象(表格视图、按钮、文本字段、使用quartzcore 制作的自定义图表等),我是否需要在按钮的“大模式”期间阻止所有这些元素的“交互性”?

【问题讨论】:

    标签: ios uiview touch


    【解决方案1】:

    您可以对您正在使用的视图进行子类化,并通过实现扩展与视图中的触摸相对应的坐标

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    

    在文档中阅读更多内容

    http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/hitTest:withEvent:

    去年的一些 WWDC 视频中建议了这种实现方式

    【讨论】:

    • 只是为了添加这个答案,如果您的屏幕有导航栏,除非您将视图直接添加到 self.view.window,否则按下导航栏时不会调用 hitTest
    【解决方案2】:

    添加一个具有框架 CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height) 作为第一个子视图的 UIButton 到您的主视图 (self.view) ,向此按钮添加一个选择器 (@selector(backgroundTap)) ,现在添加所有其他子视图,如 UITableViewUIButton 等(如根据您的要求)。现在,只要您单击没有子视图的空白区域,就会调用 backgroundTap 选择器。

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 2013-11-05
      相关资源
      最近更新 更多