.14 2012

UIView上のボタンと背景にあるボタンのタップについて

お久しぶりの投稿です。江原です。

入社させていただいて半年
日々すばらしい経験をさせていただいて本当に感謝しています!

一日も早くもっと戦力になれればと
頑張って行きたいと思います。

今日はUIViewとタップイベントについて調べてみたいと思います。

まず。。。
透明(又は半透明)のUIViewの後ろに
ボタンを配置して押下させたいとき
UIView_hitTest.png
↑う~んやはり、UIButtonは押せません。
手前のUIViewがイベントを処理した為です。

そこでUIViewのuserInteractionEnabledをNOにして
タップイベントを無視すると
背景のUIButtonにイベントを透過する事が出来ます。


でもこの方法ですと
透過した手前のUIViewにUIButtonを配置した場合に
UIView_hitTest002.png

↑UIView上のボタンがタップできません。。


親のViewがuserInteractionEnabled=NOだと
その上に配置されるview(subView)は押下イベントが発生しないようです。


そこでuserInteractionEnabledをYESにて
subviewのイベントを発生させつつ
自身のUIViewのイベントのみを透過させる方法を調べました。

// HitTestView.h
// UIViewを継承して自身のみ透過させ
// サブビューのイベントは破棄しないViewを作る
#import <UIKit/UIKit.h>
    @interface HitTestView : UIView
@end

// HitTestView.m
#import "HitTestView.h"
@implementation HitTestView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// 現在イベントが発生しているViewを取得
UIView *nowHitView = [super hitTest:point withEvent:event];

// 自分自身(UIView)だったら透過して(nilを返すとイベントを取得しなくなる)
if ( self == nowHitView )
{
return nil;
}

// それ意外だったらイベント発生させる
return nowHitView;
}
@end

こんな感じでUIViewのhitTestをオーバライドすれば
背景と自身の上に存在するUIButtonが押下できるみたいですね。

関連記事
スポンサーサイト



Comment

-
このコメントは管理者の承認待ちです
2014.06.20 19:21

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/228-b4b254d0

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク