UIButton不适用于iOS 5.x,在iOS 6.x中一切都很好

Ale*_*lex 9 xcode objective-c uibutton ios5 ios6

通过在主UIView上点击简单的UIButton,在屏幕中心出现附加的View(子视图)(以编程方式创建子视图).在该子视图中,我有UIButton启动MPMoviePlayer(此代码在创建子视图的内部方法中):

 // Create play button

UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom];
[playButton addTarget:self
               action:@selector(wtf)
     forControlEvents:UIControlEventTouchUpInside];

[playButton setTitle:@"" forState:UIControlEventTouchUpInside];
[playButton setImage:[UIImage imageNamed:[self.playButtons objectAtIndex:[sender tag] - 1]] forState:UIControlStateNormal];
playButton.frame = playButtonRect;
playButton.userInteractionEnabled = YES;
Run Code Online (Sandbox Code Playgroud)

此按钮在同一方法中作为子视图添加到此视图中:

[self.infoView addSubview:playButton];
Run Code Online (Sandbox Code Playgroud)

在iOS模拟器6.0和iOS 6.0的真实设备一切正常,在模拟器iOS 5.0和5.0的设备我有一个非常奇怪的行为:按钮开始工作只有当我按下这个按钮的区域时,我刚刚点击按钮 - 当用户点击屏幕中的任何地方时调用方法,就像我的按钮没有出现在屏幕上一样(但在视觉上它确实如此).我的目标是为5.x制作这个应用程序,所以我试着在这个奇怪的问题上找到答案.

欢迎任何建议!

Luc*_*lfo 34

您是否UITapGestureRecognizer在infoView或其中任何子视图中添加了一个?

如果是这种情况,您的手势识别器将禁止UIButton操作.你可以在这篇文章中使用Kevin Ballard或cdasher提供的解决方案

您只需要设置具有该UITapGestureRecognizerGesture Recognizer(UIGestureRecognizerDelegate)的委托的视图.然后,您可以添加以下代码:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ! ([touch.view isKindOfClass:[UIControl class]]);
}
Run Code Online (Sandbox Code Playgroud)

你的Tap Gesture Recognizer应如下所示:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!