UILabelのタッチ判定 | 渋谷で働くUnity野郎

渋谷で働くUnity野郎

備忘録として有効活用していきます。

UILabelなど、ボタンでない部品にタッチ判定をつける場合どうすればいいか。

一見それは非常に難しいように感じるが、流石apple。
用意されている関数を用いるだけで簡単に実現できる。

実現方法として以下の通り。

まずこの関数を用意する。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

この関数は画面のタッチイベントを取得する関数である。

そしてこれはタッチした画面のタグ属性を読み取る事ができる。
このタグ属性は基本的に全ての部品につけることができる。

○○.tag = 1;
などのように。
(※デフォルトは全て0となっています)

そして後は、上で挙げたメソッドの中でタグによる条件分岐をすれば、指定したラベルがタッチされたかどうか判断できる。

簡単な実現例は以下のようになっている。

まずはタッチするためのラベルを以下のように用意する。
(勿論、Storyboardとプログラムで紐付けしておく必要がある)



$Iichinのブログ





そしてViewDidLoadで次のようにタグ属性を付け加える。


$Iichinのブログ



この際重要なのは、userInteractionEnabled属性である。
これをYESにしておかないと、部品はタッチされたことを感知しない。

そして最後に最初に挙げた関数による場合分けを行う。



-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
NSLog(@"tag:%d", touch.view.tag);
if(touch.view.tag == myLbl.tag){
NSLog(@"あいうえお");
//自分の用意したメソッドへ送る
[self hoge1];
}else if(touch.view.tag == myLbl2.tag){
NSLog(@"かきくけこ");
[self hoge2];
}else{
NSLog(@"さしすせそ");
}
}




以上。