Swiftui 快捷键:点击时更改列表行高亮显示颜色

Swiftui 快捷键:点击时更改列表行高亮显示颜色,swiftui,swiftui-list,Swiftui,Swiftui List,点击时列表行的默认颜色为灰色 我知道如何使用.listRowBackground更改背景颜色,但随后它会更改为整个列表 当点击时,如何更改为自定义颜色,以便只有点击的行保持红色 import SwiftUI struct ExampleView: View { @State private var fruits = ["Apple", "Banana", "Grapes", "Peach"] var body: some View { NavigationVi

点击时列表行的默认颜色为灰色

我知道如何使用.listRowBackground更改背景颜色,但随后它会更改为整个列表

当点击时,如何更改为自定义颜色,以便只有点击的行保持红色

import SwiftUI

struct ExampleView: View {
    @State private var fruits = ["Apple", "Banana", "Grapes", "Peach"]

    var body: some View {
        NavigationView {
            List {
                ForEach(fruits, id: \.self) { fruit in
                    Text(fruit)
                }
                .listRowBackground(Color.red)

            }


        }
    }


}

struct ExampleView_Previews: PreviewProvider {
    static var previews: some View {
        ExampleView()
    }
}

首先,您希望行上的.ListRowBackground修饰符而不是整个列表,然后使用它有条件地设置每行的行背景颜色。如果将抽头行的ID保存在@State变量中,则可以根据选择状态将该行设置为红色或默认颜色。代码如下:

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()
    }
}
在@Chuck H之后

我正在使用:

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

如果您直接使用文本而不是按钮,这使我能够点击行上的任意位置,而不仅仅是文本。

如果您在iOS上寻找样式设置的替代方案,并且不想引入状态管理,因为列表由您可以使用的UITableView支持

UITableViewCell.appearance().selectedBackgroundView = UIView()
要完全删除选择颜色,请执行以下操作。或:

UITableViewCell.appearance().selectedBackgroundView = {
            let view = UIView()
            view.backgroundColor = .blue
            return view
        }()
设置特定高光颜色的步骤


请注意,这适用于整个应用程序,并且仅适用于支持UITableView的平台,因此MacOS或WatchOS将需要另一种解决方案。

请考虑中提供的方法是否回答了您的问题?这可以用于非基于ForEach的列表吗?例如使用内置选择管理功能的<代码>列表(值,选择:$selection){val in?我认为它应该有效,并且可能是一个更好的整体解决方案。这个特定的解决方案只是试图直接回答原始问题,而不是建议最佳做法。尝试一下,如果你在获得想要的东西时遇到困难,问一个新问题,并发布一条带有链接的评论。