@EnvironmentObjectを使用して環境からカスタム値を読み取る
Reading custom values from the environment with @EnvironmentObject
@ObservedObjectている場合は、各ビューから次のビューにオブジェクトを渡す必要があります。
@EnvironmentObject、ビューAは、環境にオブジェクトを置くことができ、ビューEは、環境からオブジェクトを読み出すことができる、とビューのB、C、およびDは、何が起こったのを知っている必要はありません-それは非常に良くあります。
@EnvironmentObjectプロパティラッパーを使用して、このデータの値がローカルで作成されるのではなく、環境から取得されることを示します。
@EnvironmentObjectプロパティラッパーはUser、環境内のインスタンスを自動的に検索し、見つかったものをuserプロパティに配置します
EditViewととDisplayView両方ContentViewの子であるため、ContentViewそれらの環境は自動的に継承されます。
// // ContentView.swift // HotProspects import SwiftUI //--------------------------- class User: ObservableObject { @Published var name = "Taylor Swift2" } //--------------------------- struct EditView: View { @EnvironmentObject var user: User var body: some View { TextField("Name", text: $user.name) } } //--------------------------- struct DisplayView: View { @EnvironmentObject var user: User var body: some View { Text(user.name) } } //--------------------------- //struct ContentView: View { // let user = User() // // var body: some View { // VStack { // EditView().environmentObject(user) // DisplayView().environmentObject(user) // } // } //} //--------------------------- //--------------------------- struct ContentView: View { let user = User() var body: some View { VStack { EditView() DisplayView() } .environmentObject(user) } } //--------------------------- struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
TabViewとtabItem()でタブを作成する
Creating tabs with TabView and tabItem()
TabView
ナビゲーションビューは、ユーザーがデータにドリルダウンできるビューの階層スタックを作成するのに最適ですが、関連のないデータを表示するにはあまり機能しません。そのためにはTabView、SwiftUIを使用する必要があります。これにより、画面下部にボタンストリップが作成されます。各ボタンをタップすると、異なるビューが表示されます。
@State現在表示されているタブを追跡するプロパティを作成します。
別のタブにジャンプしたいときはいつでも、そのプロパティを新しい値に変更します。
それをバインディングとしてに渡すと、TabView自動的に追跡されます。
そのプロパティの値ごとにどのタブを表示するかをSwiftUIに指示します。
import SwiftUI //--------------------------- struct ContentView: View { @State private var selectedTab = 0 var body: some View { TabView(selection: $selectedTab) { Text("Tab 1") .onTapGesture { self.selectedTab = 1 } .tabItem { Image(systemName: "star") Text("One") } .tag(0) Text("Tab 2") .tabItem { Image(systemName: "star.fill") Text("Two") } .tag(1) } } } //---------------------------