

UIButtonのアクションの管理の仕方について質問をさせていただきます。  
つかぬ事をお聞きしてしまうかもしれないのですが、どなたか回答いただけたら幸いです。

* * *
[code]

    @IBOutlet weak var button_0: UIButton!
    @IBOutlet weak var button_1: UIButton!
    @IBOutlet weak var button_2: UIButton!
    @IBOutlet weak var button_3: UIButton!
    //...以下複数個続く
    
[/code]

と複数個のUIButtonをViewControllerなどに結びつけて  
それぞれのボタンのアクションを設定したい場合

[code]

    var buttons:[UIButton] = []
    
[/code]

と配列などを用意して管理するViewControllerのViewDidLoadなどで

[code]

    buttons.append(button_0)
    buttons.append(button_1)
    buttons.append(button_2)
    //...以下個数分続く
    for i in 0..<buttons.count{
        buttons[i].tag = i
        buttons[i].addTarget(self, action: #selector(ToolView.action(_:)), forControlEvents: .TouchUpInside)
    }
    
[/code]

と記述するのは単調であまり良くない気がしてしまうのですが なにか良い方法はありますか？  
やはり、複数個の部品の設置はコードから作成するほうが良いのでしょうか？

※ViewControllerのactionはこのような感じで使おうと思っています...

[code]

    @objc private func action(sender: UIButton){
        switch sender.tag {
        case 0:
            print("button_0")
        case 1:
            print("button_1")
        case 2:
            print("button_2")
        //...個数分続く
        default:break
        }
    }
    
[/code]

* * *

* * *

* * *

おかげさまで解決しました。  
quesera2さん、画像付きでとても分かりやすかったです。ありがとうございます。  
Le Pere d'OOさんも当日の深夜に返していただき、助かりました。ありがとうございます。

よく調べればもしかしたら出てきた質問だったかもしれませんが、私自身初めて知ることができたので良かったです。  
@IBOutlet Collectionの記事  
[はじはじアプリ体験記](http://hajihaji-lemon.com/smartphone/swift/outlet-collection/)さん  
[スタック・オーバーフロー](https://stackoverflow.com/questions/24052459/swift-
iboutletcollection-equivalent)


CC BY-SA 3.0
2016-10-23T14:37:09.377
29844
2016-10-24T10:29:23.360
2017-05-23T12:38:55.250
-1
19269
question
swift ios storyboard
@IBOutletと、Viewに複数のボタンを結びつけた時のアクションの管理について


Swiftでは、

[code]

    @IBOutlet var buttons:[UIButton] = []
    
[/code]

のように配列型で`@IBOutlet`のプロパティを宣言しておくことで、複数の`UIButton`を1つのプロパティに結びつけることができます。あなたの例にあるような個別の`button_0`...を宣言して自前で`buttons.append(button_0)`とする必要はありません。

エディターをアシスタントエディターモードにして、コード側の`@IBOutlet`の前の黒ポチから、Interface
Builder側の`UIButton`に(繰り返し)つないでいくのが簡単だと思います。

やってみれば大したことではないのがすぐにわかるかと思うので、お試しください。


CC BY-SA 3.0
2016-10-23T15:25:06.853
29846
2016-10-23T15:25:06.853
13972
29844
answer


Storyboard とコードの `@IBOutlet` を紐付けるときに、`Outlet Collection` を指定すると、配列型で複数の View
を紐付けることができます。

[![Outlet
Collection](https://i.stack.imgur.com/shi5X.png)](https://i.stack.imgur.com/shi5X.png)

ですが、この場合はひとつの `@IBAction` に複数のボタンを直接紐付けるのが早いと思います。

[![画像の説明をここに入力](https://i.stack.imgur.com/3UwXG.png)](https://i.stack.imgur.com/3UwXG.png)

`@IBOutlet` は 1:1 である必要がありますが、`@IBAction` は 1:n の紐付けを行うことができます。`sender.tag`
でボタンを識別する方法でうまく動作します。

[code]

    @IBAction func action(sender: UIButton) {
        switch sender.tag {
        case 0:
            print("button_0")
        case 1:
            print("button_1")
        case 2:
            print("button_2")
        //...個数分続く
        default:break
        }
    }
    
[/code]


CC BY-SA 3.0
2016-10-24T02:54:22.290
29852
2016-10-24T02:54:22.290
5337
29844
answer