SwiftUI无法使用列表和选项卡视图正确处理@State
我有一个包含列表和一些其他视图的选项卡视图。当用户选择列表中的某个项目,然后更改选定的选项卡栏时,选项卡栏的选定状态不会更新,如果用户再次更改选定的选项卡栏,SwiftUI将同时呈现这两个内容 这里有一段视频可以更好地解释发生了什么: 下面是完整的代码:SwiftUI无法使用列表和选项卡视图正确处理@State,swift,macos,swiftui,swiftui-list,Swift,Macos,Swiftui,Swiftui List,我有一个包含列表和一些其他视图的选项卡视图。当用户选择列表中的某个项目,然后更改选定的选项卡栏时,选项卡栏的选定状态不会更新,如果用户再次更改选定的选项卡栏,SwiftUI将同时呈现这两个内容 这里有一段视频可以更好地解释发生了什么: 下面是完整的代码: import SwiftUI struct ListView: View { @State var items = ["a", "b", "c"] @State var selectedItem: String?
import SwiftUI
struct ListView: View {
@State var items = ["a", "b", "c"]
@State var selectedItem: String?
var body: some View {
List(selection: $selectedItem) {
ForEach(items, id: \.self) { item in
Text(item)
}
}
}
}
struct ContentView: View {
@State var selectedView = 1
var body: some View {
VStack {
TabView(selection: $selectedView) {
ListView()
.padding().tabItem {
Text("1")
}.tag(1)
Text("2")
.padding().tabItem {
Text("2")
}.tag(2)
Text("3")
.padding().tabItem {
Text("3")
}.tag(3)
}.padding()
}
}
}
为什么SwiftUI不尊重TabView的@State?这仅在用户选择列表中的项目后发生,如果没有选择任何项目,则一切正常。您需要将ListView的
@State var selectedItem:String?
更改为@Binding var selectedItem:String
。然后在TabView中,ListView(selectedItem:$selectedView)
它不是一种状态——它是列表激活,而且肯定是一个SwiftUI错误,因此值得向苹果提交反馈。