9

メインの UIView で単純な UIButton をタップすると、追加の View (サブビュー) が画面の中央に表示されます (プログラムで作成されたサブビュー)。そのサブビューには、MPMoviePlayer を起動する UIButton があります (このコードは、サブビューを作成するメソッド内にあります)。

 // 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 シミュレーター 6.0 と iOS 6.0 を搭載した実際のデバイスでは、すべて正常に動作します。シミュレーター iOS 5.0 と 5.0 を搭載したデバイスでは、非常に奇妙な動作をします。ボタン - ボタンが画面に表示されないように、ユーザーが画面のどこかをタップしたときに呼び出されるメソッドを呼び出しました(ただし、視覚的には表示されます)。私の目標は、このアプリを 5.x 用にすることなので、この奇妙な問題の答えを見つけようとしています。

どんなアドバイスも大歓迎です!

4

1 に答える 1

33

UITapGestureRecognizerinfoView またはサブビューのいずれかにを追加していますか?

その場合、ジェスチャ レコグナイザーが UIButton アクションを禁止しています。この投稿で Kevin Ballard または cdasher が提供するソリューションを使用できます

UITapGestureRecognizerその Gesture Recognizer ( ) のデリゲートとしてを持つビューを設定するだけですUIGestureRecognizerDelegate。次に、次のコードを追加できます。

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

そして、Tap Gesture Recognizer は次のようになります。

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

お役に立てれば!

于 2012-12-01T19:35:47.500 に答える