UIButton 在 ios5 中无法正常工作的内部事件,而在 ios6 中还可以



我有一个项目,其中包含许多UIButton,使用xcode 4.5和storyboard和ARC。 在iOS6中测试后,一切正常。但是在ios5中,UIButton修饰内部事件不起作用,未调用该操作。我尝试使用触摸,它有效。但是,我有很多UIButton,我无法一一更改。更重要的是,触地事件确实提供了很好的体验。

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

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
-(void)dismissKeyboard {
       [aTextField resignFirstResponder];
}

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

我有同样的问题。这是因为当您注册的手势识别器捕获事件时,将阻止 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>

只需在 UITapGestureRecognizer 点击上使用属性"cancelsTouchesInView"(NO)

例:

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

按钮父视点内部方法,设置包含按钮的新自定义帧大小。

最新更新