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

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

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

Swift Playgroundsは、初心者・子ども向けのSwift学習アプリ。iPad/Mac用があり、コーディングの知識は不要です。Swiftの言語そのものを選択肢からタップしてコード入力できる点が特徴。段階的に学習を積み上げる初心者にも優しい設計ながらも、正統派のSwiftが学べます。

iPad

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

Q&A

解決済

1回答

379閲覧

ContentViewにSecondView内のSegmentedControlで選んだ値に応じて表示させたいTextが表示されない

momona

総合スコア2

Swift Playgrounds

Swift Playgroundsは、初心者・子ども向けのSwift学習アプリ。iPad/Mac用があり、コーディングの知識は不要です。Swiftの言語そのものを選択肢からタップしてコード入力できる点が特徴。段階的に学習を積み上げる初心者にも優しい設計ながらも、正統派のSwiftが学べます。

iPad

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

0グッド

0クリップ

投稿2021/09/17 04:34

編集2021/09/17 05:30

プログラミング初心者です。

・ContentViewに画面遷移後のSecondViewに設置されたSegmentedControlで選ばれた値に応じて表示させたいTextがあるのですが表示されません。
・又、一応SecondView内にもSegmentedControlで選ばれた値に応じてTextを表示させたいです。
・SecondViewからContentViewに戻る為の「Done」ボタンも表示されません。

色々なサイトを手当たり次第に読み漁り、なんとかここまではたどり着いたのですが、初心者すぎてこれ以上どうしたらいいのか分かりません。
NavigationLinkとか使えれば簡単なのかもしれませんが、何をどういじったらいいのか・・・。
ObservedObjectとか殆ど理解出来ていなくて申し訳ないのですが、宜しくお願いします。

import PlaygroundSupport import SwiftUI final class ViewModel: ObservableObject { @Published var mins = "" } struct ContentView: View { let excTime = ["05mins", "10mins", "60mins"] @State var showSecondView = false @ObservedObject var selectedIndex = ViewModel() var body: some View { VStack { Text("Exercise Time: excTime[selectedIndex]") // SecondViewのSegmentedControlで選んだ値に応じて表示させたい。(例:「05mins」) Button(action: { self.showSecondView.toggle() }) { Text("User Setting") //「User Setting」の表示およびボタン機能は問題ありません。これを押すとSecondViewに画面遷移します。 } } .sheet(isPresented: self.$showSecondView) { SecondView(isPresent: self.$showSecondView, selectedIndex: self.selectedIndex) } } } struct SecondView: View { //let excTime = ["05mins", "10mins", "60mins"] @Binding var isPresent: Bool @ObservedObject var selectedIndex: ViewModel var body: some View { NavigationView { VStack { Picker(selection: $selectedIndex.mins, label: Text("ExerciseTime")) { Text("05mins").tag(0) Text("10mins").tag(1) Text("60mins").tag(2) } .pickerStyle(SegmentedPickerStyle()) timeText(num: selectedIndex) // SegmentedControlで選んだ値に応じて表示させたい(例:「05mins」) //Text(timeText[selectedIndex.mins]) //Text("Exercise Time: timeText[selectedIndex.mins]") .navigationBarTitle("SecondView", displayMode: .inline) .navigationBarItems(trailing: Button(action: {self.isPresent = false}) { Text("Done") // SecondViewの画面右上にContentViewに戻る為の「Done」ボタンを表示させたい。 }) } } } func timeText(num:Int) -> Text { switch num { case 0: return Text("05mins") case 1: return Text("10mins") case 2: return Text("60mins") default: return Text("10mins") } } } PlaygroundPage.current.setLiveView(ContentView())

イメージ説明

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

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

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

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

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

guest

回答1

0

自己解決

コード冒頭の final class ViewModel: ObservableObject 内の@published var minsに初期値を入力したら出来ました!
画面右上に「Done」の表示は上記のコードで正しかったようで、問題なく表示されていました。

final class ViewModel: ObservableObject { //@published var mins = "" @published var mins = 0 }

投稿2021/09/17 17:36

momona

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問