SwiftUI是否可以调用该函数并从其他页面更改视图?



这是我的代码

struct FirstPage: View {

var body: some View {
VStack{

NavigationView {
VStack{

Text("First Page")
.bold()

NavigationLink(destination: SecondPage()) {

Image(systemName:"arrowshape.turn.up.right.circle")
}
}
}

if (isVisible()) {
Image(systemName:"rhombus.fill")
.frame(width: 100, height: 100, alignment: .center)
}
}
}
}
func isVisible() -> Bool {
let result = Bool.random()

print("result", result)
return result
}

我想做的是调用全局函数isVisible()从SecondPage和改变图像的可见性(systemName:"菱形。填充")。这可能吗?

SecondPage如下:

struct SecondPage: View {


var body: some View {
VStack{
NavigationView {
VStack {
Text("Second Page")
.bold()
Button(action: {

}){
Text("Click here")
}
}
}
}
}
}

我想调用isVisible(),当我点击SecondPage的按钮时改变图像的可见性。

有人知道怎么做吗?

您不需要调用该函数(使用全局函数不是一个好主意)。只用@State@Binding这样的

struct FirstPage: View {

@State private var isVisible: Bool = false

var body: some View {
VStack{

NavigationView {
VStack{

Text("First Page")
.bold()

NavigationLink(destination: SecondPage(isVisible: $isVisible)) {

Image(systemName:"arrowshape.turn.up.right.circle")
}
}
}

if isVisible {
Image(systemName:"rhombus.fill")
.frame(width: 100, height: 100, alignment: .center)
}

}
}
}
struct SecondPage: View {

@Binding var isVisible: Bool

var body: some View {
VStack{
NavigationView {
VStack {
Text("Second Page")
.bold()
Button(action: {
isVisible = Bool.random()
}){
Text("Click here")
}
}
}
}
}
}

如果你仍然需要使用全局函数,那么你需要创建一个静态的共享Observable类。

下面是一个例子:

静态共享类
class GlobalClass: ObservableObject {

static var shared = GlobalClass()

@Published var isVisibleVar: Bool = false

func isVisible() {
let result = Bool.random()
print("result", result)
isVisibleVar = result
}
}

观点

struct SecondPage: View {
var body: some View {
VStack{
NavigationView {
VStack {
Text("Second Page")
.bold()
Button(action: {
GlobalClass.shared.isVisible()

/**
Or you can use
GlobalClass.shared.isVisibleVar = Bool.random()
*/

}){
Text("Click here")
}
}
}
}
}
}

struct FirstPage: View {

@ObservedObject private var globalClass = GlobalClass.shared

var body: some View {
VStack{
NavigationView {
VStack{
Text("First Page")
.bold()

NavigationLink(destination: SecondPage()) {
Image(systemName:"arrowshape.turn.up.right.circle")
}
}
}

if globalClass.isVisibleVar {
Image(systemName:"rhombus.fill")
.frame(width: 100, height: 100, alignment: .center)
}
}
}
}

最新更新