28
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

体育会系エンジニアAdvent Calendar 2017

Day 1

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

Last updated at Posted at 2017-11-30

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に比べるとお手軽に文字のドロップシャドウをつけられる、などのメリットがあるので
状況に応じて使い分けられたらベストだと思うのです。

以上でございます。
説明わかりづらい方、コメントくれたらお返しします!

28
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?