親ビューのuserInteractionEnabled = NOの場合、userInteractionEnabledプロパティがYESに設定されていても、そのサブビューはタッチイベントを受け入れません。
サブビューでタッチイベントを取得する方法はありますか?
タッチを通過させるビューを取得し、そのサブビューにタッチを処理させるには、そのビューのuserInteractionEnabledを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-but-not-to-its
親ビューのuserInteractionEnabledプロパティをNOに設定すると、そのサブビューのuserInteractionEnabledプロパティも暗黙的にNOに設定されます。あなたが説明したアプローチを使用してサブビューにタッチイベントを取得する方法はわかりませんが、ユーザーが操作するビューを単純にオーバーレイするビューを作成できますが、それらの親ではありませんビュー。
迅速な解決策-親ビューのカスタムビュークラスを用意し、それに次のコードを追加する必要があります。親ビューのユーザーインタラクションを有効にしておいてください。
次のコードがお役に立てば幸いです。
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
}
}
}