【Swift UIKit】addTargetメソッドの使い方と意味!UIControlとEventの種類

この記事からわかること
- SwiftのUIKitでUIControlに処理を紐づける方法
- UIControlクラスとは?
- addTargetメソッドの使い方と実装方法
- UIControl.Eventで指定できる
イベント
一覧
index
[open]
\ アプリをリリースしました /
SwiftのUIKitでボタンなどのUIコンポーネント使用時に登場するaddTarget
メソッドの使い方などを備忘録がてらまとめていきます。基本的には公式リファレンスの要約になっています。
UIControlクラス
UIKitで使用するUIButton
やUITextField
などのコントロール群はユーザーの操作に対して特定のアクションを管理するためのUIControl
クラスを継承して定義されているクラスです。そのためこのクラスのインスタンスを生成して使用するわけではなく継承したUIButton
などにメソッドを提供する役割となっています。
UIControl
クラスにはコントロールが有効かどうかを識別するためのisEnabled
プロパティやアクションを追加するためのaddTarget
メソッドなど管理するために必要な機能や情報を保持しています。
addTargetメソッド
addTarget
メソッドはその名の通りコントロールに対してターゲットとなるオブジェクトと処理部分であるアクションを紐付けるためのメソッドです。
引数の意味
- target:アクションメソッドを呼び出すオブジェクトを指定
- action:呼び出されるアクションメソッドを識別するセレクターを指定
- for controlEvents:UIControl.Event形式のイベントを指定
使用例
target
引数targetにはactionメソッドが呼び出されるオブジェクト(クラス)を指定します。上記の例の場合呼び出すアクションメソッドbuttonTapped
はViewController
クラスのメソッドとして定義しているのでself
と指定すればOKです。
定義しているクラスが違う場合はここにメソッドを定義しているクラスを明示的に指定します。Any?
型となっているので渡すデータ型に制限はなく、nil
も許容しているようです。
ターゲットにnil
を指定した場合はUIKitが対象のアクションメソッドを検索してくれるようです。なので上記の例をnil
に変更しても正常に動作しましたが、デメリットが何かあるのでしょうか?
action
引数actionには呼び出されるactionメソッドを識別するセレクター(Selector)を指定します。
Selector構造体
引数に渡すSelector
構造体はSwiftではなくObjective-Cの仕様です。Swiftには現段階で存在しない仕様のためObjective-Cの概念がここで使用されているようです。
#selector
形式で引数に対象のメソッド名を渡すことでUIControlインスタンスとメソッドの紐付けが完了します。
#selector
で指定するメソッドには以下のように引数を持たせることができます。渡せるのは呼び出しているUIControlインスタンス
とUIEvent
です。
引数の例
controlEvents
引数controlEventsにはトリガーとなるイベント条件を渡します。イベント条件はUIControl.Event
型として定義されている値を指定します。
UIControl.Event
UIControl.Event
型にはタップやドラッグなどのユーザー操作イベントが定義されています。
複数のaddTargetを登録する
1つのUIControl
インスタンスには複数のイベント処理を登録することも可能です。addTarget
メソッドは何度呼び出しても問題ないメソッドなので異なるイベント発生時にさまざまな処理を行わせることができます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。