7

我有一个包含大量 UIButton 的项目,使用 xcode 4.5 和故事板和 ARC。在ios6中测试后,一切正常。但是在 ios5 中,UIButton touch up 里面的事件不起作用,动作没有被调用。我尝试使用 touch down 并且它有效。但是,我有很多 UIButton,我无法一一更改。更重要的是,触地事件确实提供了良好的体验。

我在许多视图控制器中使用了以下代码:在 viewDidLoad 中:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

-(void)dismissKeyboard {
       [aTextField resignFirstResponder];
}

这可能是原因。我稍后会检查它。但它适用于ios6。你知道出了什么问题吗?非常感谢!

4

3 回答 3

16

我对你有同样的问题。那是因为当您注册的gestureRecognizer 捕获事件时,iOS5 中的触摸事件被阻止。

有两种解决方案。

一:

1)在您的视图中添加一个新视图。它应该与按钮具有相同的级别。按钮的优先级应该高于新视图。

2) 将“addGestureRecognizer”的调用更改为新视图。

[self.newView addGestureRecognizer:tap];

二:

1)实现下面的代码。当点在按钮中时,您应该返回 NO。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    CGPoint point = [gestureRecognizer locationInView:self.view];

    NSLog(@"x = %.0f, y = %.0f", point.x, point.y);
    if (CGRectContainsPoint(self.testBtn.layer.frame, point))
        return NO;

    return YES;
}

附言。您应该导入 QuartzCore.h 以访问层的属性。

#import <QuartzCore/QuartzCore.h>
于 2012-12-16T06:51:24.947 回答
5

只需在 UITapGestureRecognizer 点击上使用属性“cancelsTouchesInView”(否)

例子:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)];
gesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gesture];
于 2013-05-15T08:01:40.977 回答
0

覆盖您的按钮父视图 pointinside 方法,设置包含您的按钮的新自定义框架大小。

于 2016-07-06T15:52:59.773 回答