SwiftUI Список, как определить, какой элемент выбран в macOS - PullRequest
0 голосов
/ 27 апреля 2020

Вот то, что я основал на этом ответе . Код в настоящее время позволяет пользователю выбирать ячейку, но я не могу различить guish , какая ячейка выбрана, или выполнить любой код в ответ на выбор. Таким образом, как я могу выполнить код на основе имени выбранной ячейки и выполнить по щелчку. Ячейка в настоящий момент подсвечивается синим цветом, если щелкнуть по ней, но я хочу ее идентифицировать и действовать в соответствии с этим выбором. Примечание. Я не хочу выбирать ячейку в режиме редактирования. Кроме того, как я могу программно выбрать ячейку без клика?

struct OtherView: View {
    @State var list: [String]
    @State var selectKeeper = Set<String>()

    var body: some View {
        NavigationView {
            List(list, id: \.self, selection: $selectKeeper) { item in
                Text(item)
            }
        }
    }
}

Вот gif демонстрация выбора

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Я нашел обходной путь, но нужно щелкнуть сам текст - щелчок по ячейке ничего не делает:

struct OtherView: View {
    @State var list: [String]
    @State var selectKeeper = Set<String>()

    var body: some View {
        NavigationView {
            List(list, id: \.self, selection: $selectKeeper) { item in
                Text(item)
                  .onTapGesture {
                     print(item)
                  }
            }
        }
    }
}
0 голосов
/ 27 апреля 2020

Выбор списка работает в режиме редактирования, поэтому вот несколько примеров использования выбора

demo

struct OtherView: View {
    @State var list: [String] = ["Phil Swanson", "Karen Gibbons", "Grant Kilman", "Wanda Green"]
    @State var selectKeeper = Set<String>()

    var body: some View {
        NavigationView {
            List(list, id: \.self, selection: $selectKeeper) { item in
                if self.selectKeeper.contains(item) {
                    Text(item).bold()
                } else {
                    Text(item)
                }
            }.navigationBarItems(trailing: HStack {
                if self.selectKeeper.count != 0 {
                    Button("Send") {
                        print("Sending selected... \(self.selectKeeper)")
                    }
                }
                EditButton()
            })
        }
    }
}
...