🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

1065閲覧

[Swift]outletCollectionに順序をつける

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2019/12/09 13:19

前提・実現したいこと

![イメージ説明]

複数のUIViewを配列に入れて操作したいと思っています。
storyboardで配置したUIViewをoutletCollectionでコントローラーに結びつけているのですが、
期待している配列(画像のような順序)にならず困っています。

調べたこと・補足情報

outletCollectionは順序を保持しないことはわかりました。
現在、UIViewをoutletCollectionに入れた上で
NSArrayで順序を持った配列を作り直すという方法を検討しているのですが、
具体的なコードが思いつかず質問しました。

Swift初心者のため的外れな事を書いていたら申し訳ありません。
また、諸事情でcollectionViewは使えないため、
上記かその他良い方法がありましたら教えていただけると幸いです。

該当のソースコード

swift

1class ViewController: UIViewController { 2 3 @IBOutlet var views: [UIView]! 4 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 }

参考

古い記事ですが、考え方の参考にしたものです
https://stackoverflow.com/questions/25769107/sort-nsarray-with-sortedarrayusingcomparator
http://program.station.ez-net.jp/special/handbook/objective-c/layout/outlet-collection.asp
https://src-bin.com/ja/q/639b12

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

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

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

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

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

popai306

2019/12/09 14:46

> また、諸事情でcollectionViewは使えないため、 理由をちゃんと書いたほうがいいと思います
退会済みユーザー

退会済みユーザー

2019/12/09 14:53

UIViewがロードされた後になんらかの基準で並び替えてあげるもしくは、操作する前に並び替えてあげれば良いのではないでしょうか?
guest

回答1

0

ベストアンサー

ご意見を下さった皆さん、ありがとうございます。

今回はUIViewを一つ一つ結び付けてから配列に入れる方法をとることにしました。(普通の配列は順序を保持するため)
実際に作ろうとしているアプリはUIViewの数が多く、コードを短くするためにoutletCollectionを活用できる方法を探していましたが、良い解決策が見つかりませんでした。outletCollectionにも順序が保持されれば色々と使い勝手が良いのになあと思います...。

Swift

1 2 @IBOutlet weak var view1: UIView! 3 @IBOutlet weak var view2: UIView! 4 @IBOutlet weak var view3: UIView! 5 @IBOutlet weak var view4: UIView! 6 @IBOutlet weak var view5: UIView! 7 @IBOutlet weak var view6: UIView! 8 @IBOutlet weak var view7: UIView! 9 @IBOutlet weak var view8: UIView! 10 11 var views:[UIView] = [] 12 13 override func viewDidLoad() { 14 15 super.viewDidLoad() 16 views = [view1, view2, view3, view4, view5, view6, view7, view8] 17 18 }

投稿2019/12/10 01:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問