親ビューにuserInteractionEnabledがiOSでnoに設定されているときにタッチを取得する方法
-
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
}
}
}
周りの回避策は、親全体のユーザーインタラクションを無効にするのではなく、ボタンなどのユーザーインタラクションを無効にすることです
所属していません StackOverflow