UIButton触摸内部事件不在ios 5中工作,而在ios 6中没问题

时间:2012-12-13 06:14:31

标签: ios5 ios6 uibutton storyboard

我有一个包含大量UIButton的项目,使用xcode 4.5和storyboard以及ARC。在ios6中测试后,一切都很顺利。但在ios5中,UIButton触及内部事件不起作用,动作未调用。我尝试使用触摸它,它的工作原理。但是,我有很多UIButton,我不能一一改变。更重要的是,降落事件确实提供了良好的体验。

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

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

[self.view addGestureRecognizer:tap];

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

这可能是原因。我稍后会看看。但它适用于ios6。 你知道什么是错的吗?非常感谢!

3 个答案:

答案 0 :(得分: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;
}

PS。 你应该导入QuartzCore.h来访问图层的属性。

#import <QuartzCore/QuartzCore.h>

答案 1 :(得分:5)

只需在UITapGestureRecognizer上使用属性“cancelsTouchesInView”(NO)

示例:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)];
gesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gesture];

答案 2 :(得分:0)

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