这是我的代码。
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
}
我想做的是从 SecondPage 调用全局函数 isVisible() 并更改 Image(systemName:"rhombus.fill") 的可见性。可以这样做吗?
SecondPage 如下所示。
struct SecondPage: View {
var body: some View {
VStack{
NavigationView {
VStack {
Text("Second Page")
.bold()
Button(action: {
}){
Text("Click here")
}
}
}
}
}
}
我想在点击 SecondPage 的按钮时调用 isVisible() 并更改图像的可见性。
有谁知道这是怎么做到的吗 ?
您不需要调用该函数(使用全局函数不是一个好主意。)。只需使用@State
and @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
}
}
Views
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)
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)