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

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

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

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

253閲覧

SwiftUIで複数のPickerを並べたい。その時selectionに配列を対応させたい。

Yo_4040

総合スコア20

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2024/01/04 06:22

編集2024/01/07 05:13

実現したいこと

SwiftUIのPickerをいくつも並んでいて、さまざまな値を選択し、ある計算をするアプリを作りたいと思っています。そのために、ForEachでPickerを複数置き、それぞれのselectionをPickerと同じ数の要素を持った配列に対応させようと考えました。

発生している問題・分からないこと

ForEachで複数のPickerを画面に設置したが、selectionで同じ変数を使ってしまっているため、どれかを変えると全て対応して選択しているものが変わってしまう。そこで配列で実現しようとしたが、うまくいかない。

該当のソースコード

SwiftUI

1Picker(selection: $sl, 2 label: Text(items[id][0] as! String).foregroundColor(.red)) { 3 ForEach(0..<Int(levels[0].reduce(0, +)), id: \.self) { i in 4 Text(eachLevels[i]) 5 } 6}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

上記で該当するものを探しましたが、Picker内の選択肢をForEachで回す関連のものしか出てきませんでした。

補足

最新バージョンのXCode, SwiftUIを用いています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

そこで配列で実現しようとしたが、うまくいかない。

Pickerのselectionに配列の要素を指定したいのですね。

次のような感じでできないでしょうか?
Picker(selection: $slArray[i], ...

2つのPickerを用意して試してみたところ、
それぞれ独立して選択できたようでした。

swift

1struct ContentView: View { 2 @State private var slArray: [Int] = [0, 1] 3 var body: some View { 4 List { 5 Picker("label1", selection: $slArray[0]) { 6 ForEach(0..<10, id: \.self) { i in 7 Text("text\(i)") 8 } 9 } 10 Picker("label2", selection: $slArray[1]) { 11 ForEach(0..<10, id: \.self) { i in 12 Text("text\(i)") 13 } 14 } 15 } 16 } 17}

質問欄の該当のソースコードには
itemslevelseachLevelsなど
定義がどんなものか明確に記載されていないところもありますので、
見当違いな回答になっているかもしれません。
ごめんなさい。

投稿2024/01/12 13:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yo_4040

2024/01/24 03:24

回答ありがとうございます。 試したところ問題が解決しました! 以前自分で試した時はうまくいかなかったのですが... とても簡潔なコードで再現していただけて、参考になりました! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問