如何解决SwiftUI - 从外部调用视图中的函数
是否可以从外部调用 View 的 func。
我这样试过,但没有成功。
@main
struct CallFromOutsideApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
var body: some View {
vstack{
SubView()
Button("Call alterX in ContentView"){
// How to call alterX in SubView????
}
}
.padding()
}
}
struct SubView: View {
@State var x = "Status A"
var body: some View {
vstack{
Text("Status: \(x)")
Button("Call alterX in SubView"){ alterX()
}
}
.padding()
}
func alterX(){
x = "Status B"
}
}
解决方法
编辑
您不应从 SubView
控制 @State
的 ContentView
。相反,将 @State
放入 ContentView
并将其传递给 @Binding
中的 SubView
。
struct ContentView: View {
@State var x = "Status A"
var body: some View {
VStack{
SubView(x: $x) /// pass in the binding
Button("Alter X in ContentView"){
x = "Status B"
}
}
.padding()
}
}
struct SubView: View {
@Binding var x: String
var body: some View {
VStack{
Text("Status: \(x)")
Button("Alter X in SubView") {
x = "Status B"
}
}
.padding()
}
}
您可以将 SubView
存储在属性中。喜欢
struct ContentView: View {
let subView = SubView()
var body: some View {
VStack{
subView /// like this
Button("Call alterX in ContentView"){
subView.alterX() /// call it
}
}
.padding()
}
}
struct SubView: View {
@State var x = "Status A"
var body: some View {
VStack{
Text("Status: \(x)")
Button("Call alterX in SubView"){ alterX()
}
}
.padding()
}
func alterX(){
x = "Status B"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。