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の上にドラッグして指を離します。
TapGestureRecognizerをドラッグする前は↓
これを、UIButtonと同じ要領で
Ctrを押しながらタップさせたいLabelのTGRをコードの方にドラッグして紐づけます。
指を離すと吹き出しのようなものが出るので
OutletになっているところをActionに変えて、
Nameにはつけたいメソッド名を入力して
Connectをクリックします。
忘れちゃいけない!!!
ここまでやって、タップしても全く反応せず
悶絶の1時間を過ごしてしまいました・・・。
原因はこれ
StoryBoardに戻って
Labelが選択されている状態にして
User Interaction Enabled に
チェックを入れないと
画面が割れるほどタップしても絶対反応しません(泣)
Labelはドロップシャドウが簡単につけられる
悶絶するくらいならはじめからUIButtonにしておけばいいじゃないか
と思われるかもですが
LabelはButtonに比べるとお手軽に文字のドロップシャドウをつけられる、などのメリットがあるので
状況に応じて使い分けられたらベストだと思うのです。
以上でございます。
説明わかりづらい方、コメントくれたらお返しします!