В боковой панели SwiftUI не регистрируется первый клик - PullRequest
0 голосов
/ 10 ноября 2019

Используя SwiftUI, у меня есть навигация по боковой панели в приложении Mac для смены видов. Щелчок по элементу на боковой панели изменяет вид справа. Однако при запуске приложения боковая панель List не регистрирует первый щелчок. Требуется два щелчка, чтобы выбрать элемент. После этого боковая панель ведет себя так, как и должна, и для изменения вида требуется всего один клик.

Как я могу исправить эту начальную проблему с запуском List?

sidebar navigation

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)
    }
}

1 Ответ

0 голосов
/ 10 ноября 2019

Необходимо добавить выделение для списка, как показано ниже

@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())
}
...