#やりたいこと
ラベルのような動かないControlも、IBActionでインタラクティブに処理をさせたい.
##かいけつさく
GestureRecognizer Objectを使おう。ほぼボタンと同じようにアクションが記述できる。
可能な限りストーリーボードだけ使い、コードはアクションメソッドだけ書きたい。
##やりかた
0. Xcodeでストーリーボードを使ったプロジェクトを準備。Versionは現行。
-
ObjectLibraryからTapGestureRecognizerをストーリーボードのViewControllerの上部(黄色とかオレンジのアイコンが並んだバーになってる領域な)にD&Dで設置する。
-
TapGestureRecognizerのReferencing Outlet Collectionsの◎を引っ張って、画面のVC上のラベルコントロール(UILabel)にドロップしてヒモ付ける。
-
実行したい内容をIBActionメソッドとして記述しておく。
→このようなシグネチャのメソッド -(IBAction)selector:(id)sender{} -
TapGestureRecognizerの sent Actionsの◎からVCパネルに引っ張ると、IBアクションメソッドがリストになって表示されるので、今書いたメソッドを選択する。
いっぱい番号ふってあるが、こんだけ。実際は、1つコードを書いて、画面上で3つ操作しするだけだからラクラク。
※なお、ボタンなど元々インタラクティブなコントロールに、この処理を適用すると、本来のボタンアクションがキャンセルされるので、本来の処理も残したい場合は、Gestureオブジェクトのbehavor欄の cansels touch in veiwsのチェックをOFFする。
##そのた
- これは、ObjectiveCの話だが、たぶんSwiftでも同じようにいけるんじゃないかな? 試してみてくれ!
- あとGestureRecognizerの数を増やすか、アクションメソッド側でsenderによる分岐を入れることで、複数のコントロール毎に処理できるけど、面倒なんで省略。
[EOF]