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

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

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

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

Q&A

解決済

2回答

1240閲覧

配列のプロパティを含む、構造体の配列のList表示方法

taratarasiteru

総合スコア1

Swift

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

0グッド

0クリップ

投稿2021/10/16 15:56

編集2021/10/26 05:36

前提・実現したいこと

現状、テキストフィールドに文字列を入力後、ボタンを押すと構造体strsのlargeCateがリスト表示されますがsmallCateの"その他"がネストとして表示できるようにしたいです。

該当のソースコード

swift

1import SwiftUI 2 3struct Sample: View { 4 5 @State var inputStr: String = "" 6 @State var keepStr: String = "" 7 @State var strArray: [strs] = [] 8 9 struct strs: Hashable { 10 var largeCate: String 11 var smallCate: [String] = [] 12 13 init(largeCate: String) { 14 self.largeCate = largeCate 15 smallCate.append("その他") 16 } 17 } 18 19 var body: some View { 20 VStack(spacing: 10){ 21 22 TextField("入力まち", text: $inputStr) 23 .font(.title) 24 .background(checkStr() ? Color.green : Color.gray) 25 .opacity(0.2).cornerRadius(15.0) 26 27 Button(action: { 28 savelargeCateStr() 29 }, label: { 30 /*@START_MENU_TOKEN@*/Text("Button")/*@END_MENU_TOKEN@*/ 31 }) 32 33 List(strArray, id: .hashValue){ num in 34 Text(num.largeCate) 35// List(num, id: .hashValue){ num0 in 36// Text(num0.smallCate) 37// } 38 } 39 40 } 41 42 } 43 44 func checkStr() -> Bool{ 45 if(inputStr.count >= 3){ 46 return true 47 } 48 return false 49 } 50 51 func savelargeCateStr(){ 52 keepStr = inputStr 53 if strArray.count == 0{ 54 strArray = [strs(largeCate: keepStr)] 55 } 56 else{ 57 strArray.append(strs(largeCate: keepStr)) 58 } 59 inputStr = "" 60 } 61 62} 63 64struct Sample_Previews: PreviewProvider { 65 static var previews: some View { 66 Sample() 67 } 68}

試したこと

2D array List とかで検索したり海外の動画も見たりしましたが動的にネスト型のリストの説明をしてるものは見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

このようなイメージです。
イメージ説明

Xcode Version 13.0 (13A233)
macOs Big Sur バージョン11.6

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/10/20 17:53

回答に対してなんら反応がありませんがどうかされましたか?質問の意図と異なっていたり解決に関係ない回答であった場合はその旨ご指摘いただき質問文へもご反映下さい。
taratarasiteru

2021/10/26 05:21

大変遅くなってすみません。さわれない状況が続いてました。 largeCateの右側に下向きの矢印みたいなアイコンが出て、それをタップするとsmallCateが展開されるようにしたかったです。
taratarasiteru

2021/10/26 05:48

補足情報に実現したい状態の画像を添付しました。 画像のものは海外の動画で紹介されていたコードをそのまんま書いてみたものです。 この画像のものは配列要素を事前に書いてるものを展開できるようにしてます。 私が実現したのことはlargeCateとsmallCateを動的に表示させたいと思ってます。largeCateはとりあえずこのままでいいかと思ってます。smallCateは展開したり隠したりできるようにし、展開後smallCateの一番下に追加ボタンとかを実装しsmallCateを動的に増やせるようにしたいと思ってます。その前段階としてsmallCateを展開したり隠したりできるようにしたかったです。
guest

回答2

0

自己解決

公式ドキュメントを見て解決しました。
https://developer.apple.com/documentation/swiftui/list

投稿2021/11/19 08:08

taratarasiteru

総合スコア1

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

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

0

swift

1List(strArray, id: .hashValue){ num in 2 Text(num.largeCate) 3// List(num, id: .hashValue){ num0 in 4// Text(num0.smallCate) 5// } 6}

この箇所の numstrs オブジェクトで配列でもなんでもないのですから、列挙対象にはできないでしょう。

文字列が入っている配列は num.smallCate ではないのですか?

swift

1List(strArray, id: .hashValue){ num in 2 Text(num.largeCate) 3 ForEach(num.smallCate, id: .hashValue) { item in 4 Text(item) 5 } 6}

またセルの高さの計算が狂うので、ListList を入れるのはやめたほうがいいと思います。リストのひとつのセルの中でビューの並びを整理する場合は VStack, HStack が使用できます。

swift

1List(strArray, id: .hashValue){ num in 2 VStack { 3 Text(num.largeCate) 4 VStack { // HStackならsmallCateの文字列の群れは横並びになる 5 ForEach(num.smallCate, id: .hashValue) { item in 6 Text(item) 7 } 8 } 9 } 10}

投稿2021/10/17 08:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

taratarasiteru

2021/10/26 08:08

その他が隠せないので隠せるようにしたいです。
退会済みユーザー

退会済みユーザー

2021/10/26 19:13

放置された方には私自身はもう何も致しませんので。悪しからず。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問