Edited at

【iOS】タップできるUILabel - StoryBoardでTapGestureRecognizer -

More than 1 year has passed since last update.


UILabelにsenderが設定できない!

StoryBoardで、UIButtonから線を引っ張るとsender(タップした時のリスナー)を登録できますが

UILabelから線を引っ張ろうにも

senderが出てこない・・・

Androidな気分でやろうとすると

Viewの部品になんでもかんでも気軽にリスナーをセットできるわけではない事態にぶつかるワケです。

TextViewにonClick()、ていう感じにはできないのです。


UIButtonにはsenderだけど、UILabelには・・・?

TapGestureRecognizer

というものをUILabelに紐づけて

TapGestureRecognizerから線を引っ張ってsenderを作る

2段階でセットしてあげれば

タップできるUILabelができます。


やり方

(例えば、タップさせたいLabelが画面の真ん中にあるとしたら、の例です)

画面の一番右側の一番下に検索窓のようなものがあるので

そこに

Tap

と打ち込んでみると

フィルターがかかって、部品のリストに

TapGestureRecognizer

だけが出た状態になります。

Ctrを押しながら、TapGestureRecognizerをLabelの上にドラッグして指を離します。11.png

TapGestureRecognizerをドラッグする前は↓

2.png

ドラッグができると↓

3.png

わかりやすく名前を変えます↓

4.png

これを、UIButtonと同じ要領で

Ctrを押しながらタップさせたいLabelのTGRをコードの方にドラッグして紐づけます。

指を離すと吹き出しのようなものが出るので

6.png

OutletになっているところをActionに変えて、

Nameにはつけたいメソッド名を入力して

Connectをクリックします。

7.png

↓画像の18行目のように、メソッドが追加されます。

8.png

タップされた時にやりたい処理をカッコの中に書きます。

9.png


忘れちゃいけない!!!

ここまでやって、タップしても全く反応せず

悶絶の1時間を過ごしてしまいました・・・。

原因はこれ

10.png

StoryBoardに戻って

Labelが選択されている状態にして

User Interaction Enabled に

チェックを入れないと

画面が割れるほどタップしても絶対反応しません(泣)


Labelはドロップシャドウが簡単につけられる

悶絶するくらいならはじめからUIButtonにしておけばいいじゃないか

と思われるかもですが

LabelはButtonに比べるとお手軽に文字のドロップシャドウをつけられる、などのメリットがあるので

状況に応じて使い分けられたらベストだと思うのです。

以上でございます。

説明わかりづらい方、コメントくれたらお返しします!