UIView
という小さなものを作成しました。これには2つのUIButton
が含まれています。ビューはUITapGesture
イベントに応答します。ボタンはTouchUpInside
に応答するはずですが、ボタンをタップするとレスポンダが下にあり、タップジェスチャセレクタがトリガされます。アドバイスや提案を探しています。UIButtonのタッチイベントが基になるビューに落ちます
答えて
ビュー階層のビューの順序はどのようになっていますか?また、IBでインターフェイスを作成していますか?接続を正しく接続すると、これはまったく問題ではありません。
これは私がやったことです。 – Kyle
各UIViewには 'exclusiveTouch'プロパティがあります。 YESに設定されている場合、ビューはレスポンダチェーンのタッチを通過しません。あなたのUIButtonsでこのプロパティを設定してみて、違いがあるかどうか確認してください。
私はこれを撃つでしょう。 – Kyle
このデザインの問題は、あるボタンを別のボタンに埋め込むことと似ていることです。正当な理由があるかもしれませんが、イベントの流れにはもっと注意する必要があります。
ジェスチャ認識機能は、サブビュー(ケースの2つのボタン)に到達する前に接触を傍受します。 UIGestureRecognizerDelegateプロトコル、つまりgestureRecognizer:shouldReceiveTouch:
メソッドを実装し、タッチが2つのボタンのいずれかにある場合はNOを返します。これにより、オレンジ色の表示がボタンを意図したタッチを邪魔するのを防ぐことができ、ボタンが期待どおりに動作するようになります。
私はこれについて考えましたが、アニメーション(ボタンの青い点滅)がボタンの応答を示しているにもかかわらず、タッチに応答しているビューは基本的なビューです。 – Kyle
あなたは、オレンジ色のビューでタップジェスチャーに反応する方法変更することができます:あなたはUIButtonに触れた場合、タップは、基礎となるビューによって無視されます。この方法で
-(void) handleTapFrom:(UITapGestureRecognizer*) recognizer {
CGPoint location = [recognizer locationInView:orangeView];
UIView *hitView = [orangeView hitTest:location withEvent:nil];
if ([hitView isKindOfClass:[UIButton class]]) {
return;
}
//code that handle orange view tap
...
}
を。
この質問をチェックしてください。 (任意のタップをhighjackingからtabrecognizerを防ぎ、デリゲートなどを実装する必要はありません)
正しい答えはfound hereです。私はthis post経由でこの答えにつながった。短期使用では
:
tapRecognizer.cancelsTouchesInView = NO;
「すべて タップをキャッチする唯一の一つであることがタップ認識を防ぐ」
私は何をやってしまってきたことのためにUIButtonsを取引されています添付のタップジェスチャ認識機能を持つUIView。これは私がボタンが動作すると予想したように動作するようです。 – Kyle