带有NavigationLink和按钮的SwiftUI列表

时间:2020-04-12 15:43:50

标签: ios swift iphone xcode swiftui

我有一个计数器列表-列表中的每个元素都是一个带有数字的计数器,用户可以单击加/减按钮来增加或减少该计数器。现在,我添加了NavigationLink,以便用户可以进入每个计数器的详细视图。现在的问题是,无论您在列表上单击的位置如何,始终都会按下详细视图-即使您单击其中一个按钮(计数器增加,然后通过NavigationLink推入详细视图)-我只想在用户使用时使用NavigationLink单击数字或其他位置,但是如果用户单击按钮,则当然不会。该怎么办?

NavigationView {
        List {
            ForEach(counters, id: \.self) { counter in
                NavigationLink(destination: SingleCounterView(currentCounter: counter)) {
                    CounterCell(counter: counter)
                }
            }
        }
        .buttonStyle(PlainButtonStyle())
        .listStyle(GroupedListStyle())
}

1 个答案:

答案 0 :(得分:2)

我进行了此测试,以在NavigationView中显示带有加号和减号按钮的CounterCell。如果您点击按钮,则计数器会递增;如果您是在人字形按钮上或在按钮之外,则将出现目标。

@State var counters = ["a","b","c"]

var body: some View {
    NavigationView {
        List {
            ForEach(counters, id: \.self) { counter in
                NavigationLink(destination: Text(counter)) {
                    CounterCell(counter: counter)
                }
            }
        }
        .buttonStyle(PlainButtonStyle())
        .listStyle(GroupedListStyle())
    }.navigationViewStyle(StackNavigationViewStyle())
}

struct CounterCell: View {

@State var counter: String
@State var inc = 0

var body: some View {
    HStack {
        Button(action: { self.inc += 1 }) {
            Text("plus")
        }
        Button(action: { self.inc -= 1 }) {
            Text("minus")
        }
        Text(" counter: \(counter) value: \(inc)")
    }
}
}