我使用以下 Swift 代码在我的 iPhone 应用程序中执行两件事:
somethingElse()单击按钮时调用方法SecondView()代码
struct PrimaryView: View {
@State var buttonSelected: Int? = nil
func onSubmit() {
somethingElse()
self.buttonSelected = 1
}
var body: some View {
NavigationStack {
NavigationLink(destination: SecondView(), tag: 1, selection: $buttonSelected) {
Button(action: {
onSubmit()
}) {
Text("Click me")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我收到以下警告:
'init(destination:tag:selection:label:)' 在 iOS 16.0 中已弃用:在 NavigationStack 或 NavigationSplitView 内的列表中使用 NavigationLink(value:label:)...
问题:如何重构此代码以使警告消失但功能保持不变?
如果您遵循警告中的建议,您会得到如下信息:
NavigationStack {
List {
NavigationLink(value: 1) { // use some tag here
Button(action: {
onSubmit()
}) {
Text("Click me")
}
}
}.navigationDestination(for: Int.self) { _ in
// check the closure parameter here to return a different view
SecondView()
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这会给你一个List替代。如果您不希望这样,另一个重载 ,navigationDestination(isPresented:destination:)似乎可以工作。代码很简单
NavigationStack {
Button(action: {
onSubmit()
}) {
Text("Click me")
}.navigationDestination(isPresented: $buttonSelected, destination: { SecondView() })
}
Run Code Online (Sandbox Code Playgroud)
更改buttonSelected为Bool:
@State var buttonSelected: Bool = false
func somethingElse() {
print("something Else")
}
func onSubmit() {
somethingElse()
self.buttonSelected = true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1683 次 |
| 最近记录: |