如何从另一个视图更新 UI 视图 [SwiftUI 问题]
How to update UI of a view from another view [ SwiftUI Question]
我是 Swift 和 iOS 开发人员的新手。
我正在 SwiftUI 中构建应用程序。假设不同文件中有 2 个单独的视图:MainView() & Results() 和 TabBar()(忽略命名,这只是一个示例)(这 2 个视图在 2 个单独的 TABS 上)
我的目标是按下 FROM ResultsView() 按钮并将 MainView() 的文本值 属性 更改为其他内容,然后在 MainView() 上显示更改。我怎样才能做到这一点? P.S 请忽略对齐等。我是 Whosebug 的新手
struct MainView: View {
@State var textValue: String = "Old Text"
var body: some View {
Text(textValue)
}
}
struct TabBar: View {
var body: some View {
TabView {
MainView()
.tabItem {
Label("Main", systemImage: "circle.dashed.inset.filled")
}
ResultsView()
.tabItem {
Label("Results", systemImage: "person.2.crop.square.stack.fill")
}
}
}
}
struct ResultsView: View {
var body: some View {
Button {
// HOW TO UPDATE MainView.textValue?
} label: {
Text("Update")
}
}
}
- ContentView() 正文中只有 TabBar()
基本上,我的问题是我们如何从另一个视图更改UI 某个视图?没有 NavigationLink
听起来像是一个菜鸟问题,但如有任何答复,我们将不胜感激!
您可以通过 @Binding
.
将 textValue
从 MainView 传递到 DetailView 来实现此目的
struct MainView: View {
@State private var text: String = "Original"
var body: some View {
NavigationView {
VStack {
Text(text)
NavigationLink("Detail", destination: DetailView(text: $text))
}
}
}
}
struct DetailView: View {
@Binding var text: String
var body: some View {
Button("Change Text") {
text = "New Text"
}
}
}
我建议您阅读 this article 关于绑定的内容,因为它解释了如何从其他地方更改视图。
编辑:
因为你提到,两个视图都在 TabBar
中,这里应该是一个工作示例:
struct ContentView: View {
@State private var text: String = "Original Text"
var body: some View {
TabView {
MainView(text: $text)
.tabItem { ... }
DetailView(text: $text)
.tabItem { ... }
}
}
}
struct MainView: View {
@Binding var text: String
var body: some View {
Text(text)
}
}
struct DetailView: View {
@Binding var text: String
var body: some View {
Button("Change Text") {
text = "New Text"
}
}
}
我是 Swift 和 iOS 开发人员的新手。
我正在 SwiftUI 中构建应用程序。假设不同文件中有 2 个单独的视图:MainView() & Results() 和 TabBar()(忽略命名,这只是一个示例)(这 2 个视图在 2 个单独的 TABS 上)
我的目标是按下 FROM ResultsView() 按钮并将 MainView() 的文本值 属性 更改为其他内容,然后在 MainView() 上显示更改。我怎样才能做到这一点? P.S 请忽略对齐等。我是 Whosebug 的新手
struct MainView: View {
@State var textValue: String = "Old Text"
var body: some View {
Text(textValue)
}
}
struct TabBar: View {
var body: some View {
TabView {
MainView()
.tabItem {
Label("Main", systemImage: "circle.dashed.inset.filled")
}
ResultsView()
.tabItem {
Label("Results", systemImage: "person.2.crop.square.stack.fill")
}
}
}
}
struct ResultsView: View {
var body: some View {
Button {
// HOW TO UPDATE MainView.textValue?
} label: {
Text("Update")
}
}
}
- ContentView() 正文中只有 TabBar()
基本上,我的问题是我们如何从另一个视图更改UI 某个视图?没有 NavigationLink
听起来像是一个菜鸟问题,但如有任何答复,我们将不胜感激!
您可以通过 @Binding
.
textValue
从 MainView 传递到 DetailView 来实现此目的
struct MainView: View {
@State private var text: String = "Original"
var body: some View {
NavigationView {
VStack {
Text(text)
NavigationLink("Detail", destination: DetailView(text: $text))
}
}
}
}
struct DetailView: View {
@Binding var text: String
var body: some View {
Button("Change Text") {
text = "New Text"
}
}
}
我建议您阅读 this article 关于绑定的内容,因为它解释了如何从其他地方更改视图。
编辑:
因为你提到,两个视图都在 TabBar
中,这里应该是一个工作示例:
struct ContentView: View {
@State private var text: String = "Original Text"
var body: some View {
TabView {
MainView(text: $text)
.tabItem { ... }
DetailView(text: $text)
.tabItem { ... }
}
}
}
struct MainView: View {
@Binding var text: String
var body: some View {
Text(text)
}
}
struct DetailView: View {
@Binding var text: String
var body: some View {
Button("Change Text") {
text = "New Text"
}
}
}