带有NavigationLink的SwiftUI列表如何在点击时自定义突出显示

时间:2019-11-28 12:54:28

标签: list swiftui navigationlink

如何在列表行上自定义重叠,以便在点击时将其突出显示。我正在使用 NaviagationLink ,并且已经更改了

UITableViewCell.appearance().cellSelectionStyle = .none 

为了不使用默认的灰色选择。

我尝试将一些@State isSelected添加到我的单元格中,但是我不知道如何/何时更改此设置以使其受到影响。我尝试添加onTapGesture(),但它阻止了NavigationLink,并且不提供开始,结束状态,刚刚结束。

2 个答案:

答案 0 :(得分:1)

我这样做:

List {
    ForEach(0..<self.contacts.count) { i in
       ZStack {
           NavigationLink(destination: ContactDetails(contact: self.contacts[i])) {
                EmptyView()
           }.opacity(0)

           Button(action: {}) {
                   ContactRow(contact: self.contacts[i])
           }.buttonStyle(ListButtonStyle())
        }.listRowBackground( (i%2 == 0) ? Color("DarkRowBackground") : .white)
           .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
     }
}

还有ButtonStyle

struct ListButtonStyle: ButtonStyle {

    func makeBody(configuration: Self.Configuration) -> some View {

        configuration.label
            .overlay(configuration.isPressed ? Color("Dim").opacity(0.4) : Color.clear)
    }
}

答案 1 :(得分:0)

好的,这是该方法的非常简单的演示。这样做的目的是使NavigationLink不在列表中,并在单击行时手动激活它(该行在内部无需导航链接就可以很容易地被点击)...其他一切,如动画,效果和突出显示都由您决定。

ACCESS_FINE_LOCATION