【发布时间】:2020-09-28 05:04:28
【问题描述】:
当视图出现时,我希望能够以编程方式导航到 List 或 NavigationLinks 中的链接(从推送通知构建深层链接)。我有一个字符串 -> Bool 字典,它绑定到我的视图中的自定义 Binding<Bool>。当视图出现时,我设置 bool 属性,导航发生,但是,它立即弹回。我遵循SwiftUI NavigationLink immediately navigates back 中的答案并确保List 中的每个项目都有一个唯一标识符,但问题仍然存在。
两个问题:
- 我这里的绑定逻辑正确吗?
- 视图怎么会立即弹回来?
import SwiftUI
class ContentViewModel: ObservableObject {
@Published var isLinkActive:[String: Bool] = [:]
}
struct ContentViewTwo: View {
@ObservedObject var contentViewModel = ContentViewModel()
@State var data = ["1", "2", "3"]
@State var shouldPushPage3: Bool = true
var page3: some View {
Text("Page 3")
.onAppear() {
print("Page 3 Appeared!")
}
}
func binding(chatId: String) -> Binding<Bool> {
return .init(get: { () -> Bool in
return self.contentViewModel.isLinkActive[chatId, default: false]
}) { (value) in
self.contentViewModel.isLinkActive[chatId] = value
}
}
var body: some View {
return
List(data, id: \.self) { data in
NavigationLink(destination: self.page3, isActive: self.binding(chatId: data)) {
Text("Page 3 Link with Data: \(data)")
}.onAppear() {
print("link appeared")
}
}.onAppear() {
print ("ContentViewTwo Appeared")
if (self.shouldPushPage3) {
self.shouldPushPage3 = false
self.contentViewModel.isLinkActive["3"] = true
print("Activating link to page 3")
}
}
}
}
struct ContentView: View {
var body: some View {
return NavigationView() {
VStack {
Text("Page 1")
NavigationLink(destination: ContentViewTwo()) {
Text("Page 2 Link")
}
}
}
}
}
【问题讨论】:
-
嘿@Zorayr,该错误已在新的 SwiftUI 版本中得到修复。检查我的最新答案,希望它对你有用!
-
检查我对 iOS 13 的回答 stackoverflow.com/questions/64121813/…
标签: ios swift swiftui-navigationlink swiftui