親ビューにuserInteractionEnabledがiOSでnoに設定されているときにタッチを取得する方法

StackOverflow https://stackoverflow.com/questions/4661589

  •  10-10-2019
  •  | 
  •  

質問

親ビューにuserInteractionEnabledを持っている場合、userInteractionEnabledプロパティがYESに設定されていても、サブビューはタッチイベントを受け入れません。

サブビューでタッチイベントを取得する方法はありますか?

役に立ちましたか?

解決

ビューを取得してタッチをパススルーにしますが、サブビューのタッチを処理するには、そのビューでユーザーインターアクションがYESになり、代わりにこのスニペットを使用します。

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    id hitView = [super hitTest:point withEvent:event];
    if (hitView == self) return nil;
    else return hitView;
}

ソース: http://cocoaheads.tumblr.com/post/2130871776/ignore-touches-to-uiview-subclass-not-to-its

他のヒント

Parent ViewのuserInteractionEnabledプロパティをNOに設定すると、Subviews userInteractionEnabledプロパティを暗黙的に設定します。説明したアプローチを使用してサブビューにタッチイベントを取得する方法はわかりませんが、ユーザーに対話したいビューを単純にオーバーレイするだけで、それらの親ではないビューを作成できます。ビュー。

SWIFTソリューション - 親ビューのカスタムビュークラスを使用して、次のコードを追加する必要があります。 Parent Viewのユーザーインタラクションを有効にしてください。

次のコードが役立つことを願っています。

class MyCustomParentView: UIView {    
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let hitView = super.hitTest(point, with: event)
        if hitView == self {
            return nil
        } else {
            return hitView
        }
    }
}

周りの回避策は、親全体のユーザーインタラクションを無効にするのではなく、ボタンなどのユーザーインタラクションを無効にすることです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top