質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

829閲覧

特定のviewControllerにOutlet接続されているUIObject(例えばUIButton)一覧を取得する方法はありますか?

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/02/23 08:42

編集2019/02/23 11:04

いつもお世話になります。

例えばなのですが、下記のTestViewContorllerにOutlet接続されているUIButton名称の一覧を取得するにはどの用に記述すればよいでしょうか?

swift

1class TestViewController: UIViewController { 2 3 // Outlet/UIButton 4 @IBOutlet weak var aBtn: UIButton! 5 @IBOutlet weak var bBtn: UIButton! 6 @IBOutlet weak var cBtn: UIButton! 7 @IBOutlet weak var dBtn: UIButton! 8 @IBOutlet weak var eBtn: UIButton! 9 10 func createUIButtonArray() -> [UIButton] { 11     12    配列作る 13 14   for object in self.ほにゃらら { // <= こんなほにゃららってありますでしょうか? 15 ボタンなら配列に追加 16    } 17 18 19 return 配列返す 20 } 21}

解決方法備忘録

toki_tdさんに教えていただき、
↓こんな感じで一覧を取得することができました。

swift

1let btnArray: [UIButton] = Mirror(reflecting: self).children.filter{ 2 $0.value is UIButton}.compactMap { $0.value } as! [UIButton]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同じようなボタンの初期化等のためにUIButtonの配列を別途作りたい、とかそういう用途ですか?
特に順番とかを意識しなくていいなら、個々の(aBtn, bBtnとか)接続とは別に、追加でOutletCollectionに各ボタンを接続することでボタンの配列を作成することができるのでループでまとめて初期化などができます。
個々の認識が必要な場合はtagに番号を振っておけばいいです。

投稿2019/02/23 08:55

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/23 09:03 編集

回答ありがとうございます。 手動で接続するのが面倒だと思ったのでコードからUIButtonのOutletCollectionをつくって、 それをもとに条件ワケしてゴニョゴニョできないかとおもいまして…。
toki_td

2019/02/23 09:24

あぁ、そういうことですか。 ビュー上でまとまってるなら、同じ組となるボタンを適当なビューに入れておいて、subviewで列挙、インスタンスがUIButtonなら配列に入れる、とかかなぁ。 あとはリフレクションを使うって手もありますね。 Mirror(reflecting: self).children.filter{$0.value is UIButton}.flatMap { $0.value }
退会済みユーザー

退会済みユーザー

2019/02/23 09:47

なるほど、viewの階層?が同一ならsubviewで捕まえられるというわけですね。 リフレクションは知らなかったので、調べてtryしてみようと思います。
退会済みユーザー

退会済みユーザー

2019/02/23 11:00

ありがとうございます。 MirrorAPI?をつかって、UIObectの一覧を取得することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問