SwiftUI: Change List row Highlight colour when tapped
First, you want the .ListRowBackground modifier on the row not the whole list and then use it to conditionally set the row background color on each row. If you save the tapped row's ID in a @State var, you can set the row to red or the default color based on selection state. Here's the code:
import SwiftUI
struct ContentView: View {
@State private var fruits = ["Apple", "Banana", "Grapes", "Peach"]
@State private var selectedFruit: String?
var body: some View {
NavigationView {
List {
ForEach(fruits, id: \.self) { fruit in
Text(fruit)
.onTapGesture {
self.selectedFruit = fruit
}
.listRowBackground(self.selectedFruit == fruit ? Color.red : Color(UIColor.systemGroupedBackground))
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Following on @Chuck H,
I'm using:
List {
ForEach(viewModel.sharingGroups, id: \.self) { group in
Button(action: {
self.selectedGroup = group
}, label: {
Text(group.name)
})
.listRowBackground(self.selectedGroup == group ? Color.gray : Color(UIColor.systemGroupedBackground))
}
}
If you use a Button instead if Text directly, this enables me to tap anywhere on the row, not just on the text.