我有一个项目,其中包含许多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];
按钮父视点内部方法,设置包含按钮的新自定义帧大小。