首页 > 解决方案 > onTapGesture 会劫持事件吗?

问题描述

我正在尝试使用onTapGesture,但这样做几乎不可能访问该列表 - 如果我删除onTapGesture它可以完美地工作

这是我正在使用的:

struct NavPickerView: View {
    @State var selected: Int = -1
    @State var cities: [String] = ["New York", "San Diego", "Houston", "Boston"]
    @State var selectionStarted: Bool = false
    var body: some View {
        VStack {
            Text("\(selectionStarted ? "SELECTING" : "WAITING")")
            NavigationView {
                Form {
                    Section {
                        Picker(selection: $selected, label: Text("Search for...")) {
                            Text("Select City").tag(-1)
                            ForEach(0..<cities.count) {
                                Text(verbatim: self.cities[$0]).tag($0)
                            }
                        }
                    }
                }
                .onTapGesture { self.selectionStarted = true }
                .navigationBarTitle(Text("Cities"))
            }
        }
    }
}

当一个项目被选中而不使列表几乎无法访问时,有什么方法可以运行代码?

标签: swiftui

解决方案


在您的情况下,这似乎.onAppear更合适:

Form {
    Section {
        Picker(selection: $selected, label: Text("Search for...")) {
            Text("Select City").tag(-1)
            ForEach(0..<cities.count) {
                Text(verbatim: self.cities[$0]).tag($0)
            }
            .onAppear { self.selectionStarted = true }
        }
    }
}

推荐阅读