gpt4 book ai didi

swiftui - 如何在 SwiftUI 中关闭工作表时刷新 View

转载 作者:行者123 更新时间:2023-12-03 14:19:19 25 4
gpt4 key购买 nike

我想从一个 View 获取用户输入(使用 TextField )并在另一个 View 中显示它(用户输入的文本)。

这是一个最小的,可重现的例子

我创建了一个 ObservableObject命名为 UserData

import Foundation
import SwiftUI
import Combine

class UserData: ObservableObject {
@Published var name: String = ""
}

然后我创建了一个名为 Edit 的 View 与 TextField用户可以在其中输入文本
import SwiftUI

struct Edit: View {

@ObservedObject var userData = UserData()

var body: some View {
VStack {
TextField("Enter Name", text: $userData.name)
}
}
}

这是 ContentView ,我想在其中显示用户输入的文本的 Root View (最初,文本为空)。
import SwiftUI

struct ContentView: View {

@State var isPresented = false
@ObservedObject var userData = UserData()

var body: some View {
VStack {
Text(self.userData.name)
.font(.largeTitle)

Button(action: { self.isPresented.toggle() }) {
Text("Click me to Edit")
}
.sheet(isPresented: $isPresented) {
Edit()
}
}
}
}

当我们点击 ContentView中的按钮时, 一张表显示 Edit看法

当我单击该按钮时,一张带有 Edit 的工作 TableView 出现✅。
然后我可以使用 TextField 输入文本✅。
但是当我通过向下拖动关闭工作表时, TextContentView还是空的🙁。

据我所知, $userData.name每当我在 TextField 中输入内容时都会更新.
但是一个 Text在另一个具有绑定(bind) self.userData.name 的 View 中不会反射(reflect)更新的值😫。

有什么方法可以更新 Text当我们关闭工作表或有其他方法可以做到这一点?
请帮我。
感谢您阅读我的问题😊

最佳答案

您的 Edit查看和ContentView每个人都持有单独的UserData对象。它们不共享对单个对象的引用,因此编辑其中一个不会更新另一个。

首先更新您的Edit查看所以它不会初始化自己的UserData目的:

@ObservedObject var userData: UserData

然后,在您的 ContentView ,传递对您的单一规范 UserData 的引用对象进入 Edit看法:
.sheet(isPresented: $isPresented) {
Edit(userData: self.userData)
}

关于swiftui - 如何在 SwiftUI 中关闭工作表时刷新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57808873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com