技術ブログ

プログラミング、IT関連の記事中心

Selectorで引数を渡す【Swift】

◾️はじめに

アプリを開発していると、データベースから取得したデータを元に、UIButtonを生成する場合など動的にUIButtonを生成する事がある。
UIButtonをソースコードで動的に生成する場合、ボタン押下時の処理でSelectorの指定が必要になるが、そのSelectorには引数を渡すような機能がない。

そこで、ここでは、Selectorで引数を渡すための方法を記載する。

◾️Selectorの引数

まずは、UIButtonのカスタムクラスを作成する。(以下ではCustomButtonとしている。)
カスタムクラスには、UIButtonを継承している必要があります。

このカスタムクラスに引数として使用するための変数を用意します。

// ボタンのカスタムクラス(ボタン押下時のSelectorの引数を使用する為に用意)
class CustomButton:UIButton {
    // 引数として使用する
    var argument:String?
}

上記のカスタムクラスを使用して、UIButtonを生成する。
(以降では、カスタムクラスを使用して生成されたボタンを「カスタムボタン」と記載する。)

カスタムボタンの押下時に引数を渡すために、上記で用意した引数の変数に値を設定した後で
Selectorを使用してボタン押下時の処理を記載する。

// カスタムクラスを使用して、UIButtonを生成する
let button = CustomButton()
「button」押下時にselector内のメソッド実行
button.argument = "引数の値"
button.addTarget(self, action: #selector(target(_:)), for: .touchDown)

Selectorで指定されたメソッドにて、渡ってきた引数を確認する場合には、以下の様に記載する。

// 対象のボタン押下時の処理
@objc func target(_ sender: CustomButton) {
    print(sender.argument)
}

これで、複数引数を渡したい場合や、String以外の型の引数を渡す事も可能です。

UIButton以外にも、Selectorで引数を渡したい場合には、同様にカスタムクラスを作成し、引数を設定する事で
引数を渡す事ができる。