2017-02-07 3 views
2

を処理した後、タッチイベントを受け取る親ビューを無視するかのiOSは、以下の絵を見てください:私はthisチュートリアルに従うことで実現RangeSliderなどのカスタムUIControlを持って子ビューが

enter image description here

を。私は、FilterViewControllerの中にRangeSliderを入れてスライドさせることができます。

クラスRangeSlider私は、UIControlbeginTracking, continueTracking, endTrackingの3つの方法を使用して、ユーザーがスライダのインジケータを移動したときにタッチイベントを処理しました。

オンクラスFilterViewController私はUIPanGestureRecognizerを使用して、ユーザーがスライドするときにタッチイベントを処理しました。

私はスライダーの指標を移動しようとする課題ViewControllerも動きます。そして指標は少し動いているだけです。それは子ビューと親ビュー受信タッチイベントの両方であるようです。

質問

は、どのように私は親ビュー(ViewController)がタッチイベントを受け取る無視することができますか?

答えて

0

あなたのPanGestureRecognizerデリゲート

gestureRecognizerShouldBegin(_ :)

編集の方法を実装する必要があります。このことができます

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    guard let view = gestureRecognizer.view, view.isKind(of: UIControl.self) else { 
     return true 
    } 
    return false 
} 

希望をしてみてください。

+0

私はすべてのコントロールを観察し、コントロールでタッチイベントが発生するたびにチェックする必要があります。私の問題を解決するための方法が簡単かどうか、あるいはそれほど複雑ではありませんか? –

0

これはviewDidLoad()で記述できます。

self.view.isUserInteractionEnabled = false 
+0

それは何の使用ですか? –

+0

親コントローラのビューにタッチイベントは表示されません。 –

-1

これは、Objective-Cの中に例えば申し訳

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view isDescendantOfView:self.tableView]) { 
     return NO; 
    } 

    return YES; 
} 

(それはタッチデリゲートであると仮定した場合)FilterViewController以内に役立つはずです、あなたは簡単に迅速に変換することができます。これは、使用しているテーブルまたはスクロールビューが、そのサブビューの接触に反応しないことを意味します(RangeSliderがテーブルビューセルの子孫サブビューであると仮定します)。それが助けにならないかどうか私に教えてください、私はいくつかの異なる方法でこれらの問題を過去に強制しました!

+0

私はそのように使ってみましたが、動作しません。問題は次のとおりです。私は、ViewControllerのViewの「View」を「RangeSlider」では発生させ、ViewControllerのViewの他のサブビューでは発生しないようにします。 –

+0

があなたを得ました! if([touch.view isDescendantOfView:self.slider]){もうまくいきませんか?申し訳ありませんが、コードなしでより詳細な情報を手に入れることはできません。ちょっとしたテストプロジェクトを共有できますか? – iago849

関連する問題