2012-09-20 41 views
14

ジェスチャー認識機能と同じ場所にあるUIButtonがある場合、iOS 6は同じジェスチャーでアクティブになっているように見せかけます。iOS6でのジェスチャー認識機能の処理

ジェスチャ認識機能を有効にする代わりにボタンをクリックすると、が新しい問題を作成するときに、この新しい自動処理機能が問題を解決します。

のiOS 5では、あなたは実現することができます。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

は時に対立してUIButtonにアクションを転送します。

これはiOS 6では動作しないようです。また、(この時点でUIButtonがジェスチャ認識ツールの代わりに優先順位を持つため)このメソッドの動作を反転させることはできません。


コンプリート方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view isKindOfClass:[UIControl class]]){ 
     return NO; 
    } 
    return YES; 
} 
+0

uivuttonのサブビューを持ち、ジェスチャー認識機能をボタンの代わりに使用したいuiviewのognizer? – Ahti

+0

はい。実際には、セル内に 'UIButtons'を持つ' UITableView'があり、ボタンの代わりにジェスチャ認識機能を有効にします。 – jturolla

+0

iOSでこれを元に戻していないのですか?私はいつもボタンの下で打つのに問題があった。 –

答えて

6

私はあなたが合うように変更し、問題を回避するためにこれをやった:あなたはので、これはiOSの6で呼び出します宣言どこ

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
     [self MyCommonSelector];// this will work for ios 5 
     return Yes; 
} 

はボタンでターゲットを追加します。

[self.myButton addTarget:self action:@selector(MyCommonSelector) 
    forControlEvents:UIControlEventTouchUpInside]; 

ボタンタップや電話をするジェスチャーから呼び出されるこの方法では、あなたのものを行います。

-(void)MyCommonSelector 
{ 
    //Do your stuff here what you want to do with Gesture too. 
} 
0

私はあなたがそれらをタップしたくない場合は、そこUIButtonsをかけることになり、なぜ、あなたはオーバーライドすることでタッチを受けてからサブビューを防ぐことができます知っていないが、 -hitTest:withEvent:あなたの含むビューの方法。いずれかのボタンをタップしたときにデフォルトで、あなたの含むビューがボタンを返すように、デフォルトで

-hitTest:withEvent:は、「指定された点を含む(自身を含む)ビュー階層における受信機の最も遠い子孫」を返します。

あなたの実装では、このようなものになります。これは上と呼ばれている、あなたのコンテナビューは、タッチのポイントが含まれている場合、それは自分自身を返し、それに接続されているジェスチャー認識は、タッチを取得しますので、

- (UIView *)hitTest:(CGPoint)aPoint withEvent:(UIEvent *)event { 
    if ([self pointInside:aPoint]) { 
     return self; 
    } else { 
     return nil; 
    } 
} 

を。

この実装ではサブビューは返されないため、UIButtonのどれもタッチに応答する機会はありません。

+0

これは良い考えではないことが判明しました。 – jturolla

+2

あなたは* why *を共有してもよろしいですか? – Ahti

+0

私はこの方法で隠している "ポップアップ"のボタンを持っています。このボタンは動作しません。 – jturolla

0

私は単純なようですが、UIButtonのuserInteractionEnabledプロパティを "NO"に設定したと思いますか?ヒットテストとジェスチャー認識システムから自動的に削除されます。

+0

これは良いパスになりました。 – jturolla

+0

それからあなたは私を正しいものとしてマークすることができますか? – thebarcodeproject

+0

大変申し訳ございませんが、これは良い道ではありません。 – jturolla

関連する問題