3

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

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

4

2 回答 2

12

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

- (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 视频中建议了这种实现方式

于 2013-04-30T08:18:23.750 回答
3

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

于 2013-04-30T08:04:10.543 回答