2012年3月30日金曜日
UIWebViewの画面タップトラップ
UIWebViewの画面がタップされたことを検知しようとしたところ、UIWebViewは内部にUIScrollViewを持ち、さらに実際の描画はそのsubviewが行うため、UIWebViewのサブクラスにイベントを受け取るメソッド(-touchesBegan:withEvent:等)をオーバライドしても呼ばれません。
この場合、hitTestを利用すると画面タップを検知することができます。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
//必要であればevantをチェック
//superのメソッド呼び出し前後で処理を行う。
UIView *v = [super hitTest:point withEvent:event];
//vは実際にイベントに応答するオブジェクト。イベントを横取りするのでなければvを返す。
return v;
}
UIViewController(のサブクラス)でも同様の方法でタップを検知できます。
UIViewControllerのviewがUIWebViewの場合は、次のようにhitTestメッセージが送られ、なんらかのscrollViewのサブビューが応答し、そのオブジェクトにイベント関連メッセージが送られます。
UIViewController
⇒UIWebView
⇒UIScrollVeiw
⇒content view(s)
そのため、UIViewControllerやUIWebViewのイベント関連メソッドをオーバライドしても呼ばれません。
[補足]
hitTestも利用可能ですが、UIGestureRecognizerを使うのがよさそうです。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿