Как выбрать элемент кнопкой или жестом касания в моем списке SwiftUI и передать его в другое представление
В моем приложении мне нужны два игрока (только 2 имени / строки), выбранные из массива, построенного в SwiftUI-коде List / ForEach, который используется в другом представлении.
Каким образом можно преобразовать имя в строку для моего текста (элемента)?
Могу ли я выбрать два пункта из списка?
Спасибо за любую помощь. Франц
Мой код (изменен, найден Ale Patron, Учебник с использованием UserDefaults с кодированием и декодированием массива / списка):
@State private var allTeams: [PlayerItem] = []
@State private var newPlayer = ""
@State private var selectedPlayer = ""
@State private var selection: String?
struct PlayerItem: Identifiable {
var id = UUID()
let player: String
}
var body: some View {
VStack{
HStack {
TextField("Add Players/Teams...", text: $newPlayer)
.textFieldStyle(RoundedBorderTextFieldStyle())
Button(action: {
self.allTeams.append(PlayerItem(player: self.newPlayer))
self.newPlayer = ""
}) {
Image(systemName: "plus")
}
.padding(.leading, 5)
}.padding()
List{
ForEach(allTeams) { playerItem in
Text(playerItem.player)
}
.onTapGesture {
print("How can I select my first und my second player")
}
}
Text("Selected Player: \(selectedPlayer)")
}
}
}
1 ответ
Вам следует использовать индексы для того, что вы пытаетесь сделать. Попробуй это:
ForEach(allTeams.indices) { i in
Text(allTeams[i].player)
.onTapGesture {
print("How can I select my first und my second player")
print("The selected player is \(allTeams[i].player). The second player is \(allTeams[i + 1].player)"
}
}
Не забудьте также проверить, является ли выбранный игрок последним в массиве, и поймать его. В противном случае вы можете столкнуться с ошибкой за пределами допустимого диапазона.