我在 mi ContentView 中有一個 DatePicker。
我正在作業的應用程式要求所有其他視圖具有相同的 DatePicker,并且在 ContentView 頁面中選擇了確切的日期。
有任何想法嗎?
uj5u.com熱心網友回復:
這是演示如何Date使用系結將變數傳遞給其他視圖的演示代碼。如果您不需要其他視圖更改日期,請使用@State var sameDate: Date代替@Binding var sameDate: Date.
你也可以用一個單一的來實作同樣的效果,ObservableObject并使用 傳遞它@EnvironmentObject,請參閱 EDIT-1。
import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
@State var birthDate = Date()
var body: some View {
NavigationView {
VStack (spacing: 80) {
DatePicker(selection: $birthDate, displayedComponents: .date) {
Text("Select a date")
}.padding(.top, 50)
NavigationLink("Next view", destination: NextView1(sameDate: $birthDate))
}
}.navigationViewStyle(.stack)
}
}
struct NextView1: View {
@Binding var sameDate: Date
var body: some View {
VStack (spacing: 80) {
DatePicker(selection: $sameDate, displayedComponents: .date) {
Text("Next view-1 date")
}.padding(.top, 50)
NavigationLink("Next view", destination: NextView2(sameDate: $sameDate))
}
}
}
struct NextView2: View {
@Binding var sameDate: Date
var body: some View {
DatePicker(selection: $sameDate, displayedComponents: .date) {
Text("Next view-2 date")
}.padding(.top, 50)
}
}
EDIT-1:使用ObservableObject.
class DateManager: ObservableObject {
@Published var birthDate = Date()
}
struct ContentView: View {
@StateObject var dateManager = DateManager()
var body: some View {
NavigationView {
VStack (spacing: 80) {
DatePicker(selection: $dateManager.birthDate, displayedComponents: .date) {
Text("Select a date")
}.padding(.top, 50)
NavigationLink("Next view 1", destination: NextView1())
}
}.navigationViewStyle(.stack)
.environmentObject(dateManager)
}
}
struct NextView1: View {
@EnvironmentObject var dateManager: DateManager
var body: some View {
VStack (spacing: 80) {
DatePicker(selection: $dateManager.birthDate, displayedComponents: .date) {
Text("Next view-1 date")
}.padding(.top, 50)
NavigationLink("Next view 2", destination: NextView2())
}
}
}
struct NextView2: View {
@EnvironmentObject var dateManager: DateManager
var body: some View {
DatePicker(selection: $dateManager.birthDate, displayedComponents: .date) {
Text("Next view-2 date")
}.padding(.top, 50)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412002.html
標籤:
