在自定义视图中点击手势识别器以查看而不是子视图

时间:2013-12-03 19:53:38

标签: ios objective-c uiview uitapgesturerecognizer

我创建了一个customViewController作为customActionsheet。在这个customViewController中,我有一个UIView作为主视图(self.view)和一个IBOutlet UIView,它是自定义操作表(actionSheetView)。我想要做的是让这个自定义操作表像一个常规的动作表,如果你点击黑暗区域,在我的情况下,使用blackColor背景和alpha 5.0的视图。这就是我所拥有的:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(slideOut)];
tapGesture.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapGesture];

问题在于子视图(自定义操作表视图)也获取了tapgesture,因此在actionSheetView上点击任何内容都会获得点击手势。我尝试了一些诸如- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touchself.actionSheetView.userInteractionEnabled = NO;之类的内容,但两者似乎都不起作用。任何人都知道如何使self.view可以自我修复,但禁用self.actionSheetView的手势?非常感谢任何提示,指导或帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我正在研究这种相同风格的系统。我发现它适用于你:

  1. 添加一个新的UIView作为主UIView的子视图。
  2. 创建您想要自定义UI的另一个UIView(可以是一个像操作表,选择器等的表)。确保在步骤1中显示在UIView上方。
  3. 在步骤1的UIView上注册UITapGestureRecognizer。
  4. (可选)添加额外按钮(例如"取消"和"完成")并设置自定义控制器触发的代理。
  5. 主要的UIView(self.view)应该是opague,颜色为1的清晰颜色。完整的子视图(参见步骤1)可以是任何颜色(我使用浅灰色),但调整alpha值(0.5为我)。

    很遗憾,我无法发布图片,因为我还没有足够的网站代表。

    如果您正在使用IB并且无法接收点击,请检查属性检查器(在视图部分下)以确保"用户互动"已启用。

答案 1 :(得分:0)

您需要设置代理

tapGesture.delegate = self.actionSheetView


//actionSheetView.m
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{
     return NO;
}