SwiftUI 侧边栏列表不注册第一次点击
SwiftUI sidebar list does not register first click
使用 SwiftUI,我在 Mac 应用程序 中使用侧边栏导航来更改视图。单击边栏中的项目会更改右侧的视图。但是,当应用程序启动时,侧边栏 List
不会记录第一次点击。 select 一个项目需要点击两次。之后,边栏会正常运行,只需单击一下即可更改视图。
如何解决 List
的初始启动问题?
import SwiftUI
struct DetailView: View {
var selection: String
var body: some View {
containedView()
}
private func containedView() -> AnyView {
switch selection {
case " Apple":
return AnyView(AppleView())
case " Banana":
return AnyView(BananaView())
case " Coconut":
return AnyView(CoconutView())
default:
return AnyView(Text("Some view here").frame(maxWidth: .infinity, maxHeight: .infinity))
}
}
}
struct SidebarView: View {
let items = [" Apple", " Banana", " Coconut", " Cherry", " Peanut", " Peach", " Tomato", " Bread", " Pizza", " Broccoli", " Kiwi", " Cheese", " Watermelon"]
var body: some View {
List(items, id: \.self) { item in
NavigationLink(destination: DetailView(selection: item)) {
Text("\(item)")
}
}
.listStyle(SidebarListStyle())
}
}
struct ContentView: View {
var body: some View {
NavigationView {
SidebarView()
DetailView(selection: " Apple")
}
.frame(height: 300)
}
}
List需要添加选择,如下图
@State var current = Set<String>()
var body: some View {
List(items, id: \.self, selection: $current) { item in
NavigationLink(destination: DetailView(selection: item)) {
Text(item)
}
}
.listStyle(SidebarListStyle())
}
使用 SwiftUI,我在 Mac 应用程序 中使用侧边栏导航来更改视图。单击边栏中的项目会更改右侧的视图。但是,当应用程序启动时,侧边栏 List
不会记录第一次点击。 select 一个项目需要点击两次。之后,边栏会正常运行,只需单击一下即可更改视图。
如何解决 List
的初始启动问题?
import SwiftUI
struct DetailView: View {
var selection: String
var body: some View {
containedView()
}
private func containedView() -> AnyView {
switch selection {
case " Apple":
return AnyView(AppleView())
case " Banana":
return AnyView(BananaView())
case " Coconut":
return AnyView(CoconutView())
default:
return AnyView(Text("Some view here").frame(maxWidth: .infinity, maxHeight: .infinity))
}
}
}
struct SidebarView: View {
let items = [" Apple", " Banana", " Coconut", " Cherry", " Peanut", " Peach", " Tomato", " Bread", " Pizza", " Broccoli", " Kiwi", " Cheese", " Watermelon"]
var body: some View {
List(items, id: \.self) { item in
NavigationLink(destination: DetailView(selection: item)) {
Text("\(item)")
}
}
.listStyle(SidebarListStyle())
}
}
struct ContentView: View {
var body: some View {
NavigationView {
SidebarView()
DetailView(selection: " Apple")
}
.frame(height: 300)
}
}
List需要添加选择,如下图
@State var current = Set<String>()
var body: some View {
List(items, id: \.self, selection: $current) { item in
NavigationLink(destination: DetailView(selection: item)) {
Text(item)
}
}
.listStyle(SidebarListStyle())
}