gpt4 book ai didi

swift - 如何有条件地调用 SwiftUI NavigationLink?

转载 作者:行者123 更新时间:2023-12-04 08:41:16 34 4
gpt4 key购买 nike

我正在考虑如何有条件地允许启动 NavigationLink当用户点击它时。在 UIKit这很明显,但在 SwiftUI这在我看来是个大问题。我知道我可以申报 NavigationLink在我看来的某个地方,即

@State private var isFired = false

/* (...) */

NavigationLink(destination: AnotherView(), isActive: $isFired) { EmptyView() }
并像这样称呼它
Button(action: {
if /* check condition */ {
self.isFired = true
} else {
print("condition is not fulfilled")
}
}) {
Image("my-image")
}
但是...问题是:我的导航链接是在循环中动态创建的,并将图像包装在 ScrollView 中。 , IE。
ScrollView(.vertical) {
ForEach(photos, id: \.self) { element in
NavigationLink(destination: ImagePreviewView(photo: element)) {
Image(uiImage: element.image)
}
}
}
如何有条件地允许启动上面代码中的导航链接?例如:用户点击图像 -> 显示密码请求 -> 如果密码正确,则导航链接触发,否则应用程序执行其他操作(显示警报等无关紧要)

最佳答案

无论如何它应该是一个按钮......像

ScrollView(.vertical) {
ForEach(photos, id: \.self) { element in
Button(action: {
// here call a function with callback provided if password
// verification passed
self.checkPassword { verified in
if verified {
self.photo = element // store tapped element
self.isFired = true // << this might be called async
}
}
}) {
Image(uiImage: element.image)
}
}
}
.background(
// activate link for tapped photo
NavigationLink(destination: ImagePreviewView(photo: self.photo),
isActive: $isFired) { EmptyView() }
)

关于swift - 如何有条件地调用 SwiftUI NavigationLink?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64558834/

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