7

xcode 4.5とストーリーボードとARCを使用して、多くのUIButtonを含むプロジェクトがありました。iOS6でテストした後、すべてうまくいきます。しかし、ios5 では、イベント内の UIButton タッチアップが機能せず、アクションが呼び出されませんでした。タッチダウンを使用しようとしましたが、動作します。しかし、私はたくさんの UIButton を持っているので、それを 1 つずつ変更することはできません。さらに、タッチダウンイベントは良い経験をもたらします。

多くのビュー コントローラーで以下のコードを使用しました。

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

-(void)dismissKeyboard {
       [aTextField resignFirstResponder];
}

これが理由かもしれません。後で確認します。しかし、それはios6で動作します。何が悪いかわかりますか?どうもありがとう!

4

3 に答える 3

16

私はあなたに同じ問題を抱えていました。これは、iOS5 では、登録したgestureRecognizer がイベントをキャプチャすると、タッチ イベントが防止されるためです。

解決策は 2 つあります。

1:

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;
}

ps。レイヤーの属性にアクセスするには、QuartzCore.h をインポートする必要があります。

#import <QuartzCore/QuartzCore.h>
于 2012-12-16T06:51:24.947 に答える
5

UITapGestureRecognizerタップでプロパティ「cancelsTouchesInView」(NO)を使用するだけです

例:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)];
gesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gesture];
于 2013-05-15T08:01:40.977 に答える
0

ボタンの親ビューの pointinside メソッドをオーバーライドして、ボタンを含む新しいカスタム フレーム サイズを設定します。

于 2016-07-06T15:52:59.773 に答える