9

通过点击主 UIView 上的简单 UIButton,附加视图(子视图)出现在屏幕中心(以编程方式创建的子视图)。在该子视图上,我有 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;

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

[self.infoView addSubview:playButton];

在 iOS Simulator 6.0 和带有 iOS 6.0 的真实设备中,一切正常,在 Simulator iOS 5.0 和带有 5.0 的设备中,我有一个非常奇怪的行为:只有当我通过这个按钮的区域进行拖动时,按钮才开始工作,当我点击按钮 - 它调用了当用户点击屏幕上的任何位置时调用的方法,就像我的按钮没有出现在屏幕上(但在视觉上它确实出现了)。我的目标是为 5.x 制作这个应用程序,所以我尝试在这个奇怪的问题上找到答案。

欢迎任何建议!

4

1 回答 1

33

您是否添加UITapGestureRecognizer到 infoView 或任何它的子视图?

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

您只需要设置以UITapGestureRecognizer该手势识别器 ( ) 为代表的视图UIGestureRecognizerDelegate。然后你可以添加以下代码:

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

您的点击手势识别器应如下所示:

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

希望这可以帮助!

于 2012-12-01T19:35:47.500 回答