首页 > 解决方案 > 自动完成文本字段建议未注册单击事件 SwiftUI

问题描述

我是 SwiftUI 的新手(和我们大多数人一样)

我正在尝试使用谷歌位置实现自动完成 TextField,我的基本实现工作正常,但我的按钮点击在我的“建议”列表中不起作用。

代码贴在下面


struct CreateVenueView: View {

    @ObservedObject private var viewModel: CreateVenueViewModel = CreateVenueViewModel()
    @State private var selectedSport = 0 {
        willSet(newValue) {
            print(newValue)
        }
    }


    var body: some View {
        ZStack {
            Form {
                Picker(selection: $selectedSport, label: Text("Sport")) {
                    ForEach(Sport.all()) { sport in
                        Text(sport.value.capitalized)
                    }
                }
                .padding(.vertical, 5)

                TextField("Venue name", text: $viewModel.venueName)
                    .padding(.vertical, 5)

                TextField("Address", text: $viewModel.typedAddress)
                    .padding(.vertical, 5)

                TextField("Venue detail", text: $viewModel.selectedSport)
                    .padding(.vertical, 5)
            }
            if !viewModel.addresses.isEmpty {
                VStack(alignment: .leading) {
                    List {
                        ForEach(viewModel.addresses) { address in
                            Button(action: {
                                self.viewModel.selectedAddress = address
                            }) {
                                Text("\(address.displayAddress())")
                            }
                        }
                    }
                    .frame(height: CGFloat(viewModel.addresses.count * 50))
                    Spacer()
                }
                .padding()
                .offset(y: 120)
                .shadow(radius: 5)
                .cornerRadius(5)
            }
        }
        .accentColor(Color.Palette.accent)
        .navigationBarTitle("Add Venue")
    }
}

正如您所看到的,当我的视图模型中有可用的“地址”时,我们会显示建议列表。附上gif。

演示

但是,不会为所有项目调用 Button 操作,前两个项目注册点击,正如您在选择第二个选项时从突出显示中看到的那样,但是当在第二个选项下选择任何元素时,您会看到交互发生与表格。

当我没有偏移量或分隔符时,列表将呈现在屏幕底部,远低于表单,并调用所有按钮操作。所以我猜想拦截点击事件的表单存在问题,而不是我的建议列表。

任何人都知道我可以做些什么来解决这个问题?

谢谢

标签: autocompleteswiftuitextfieldbuttonclickswiftui-form

解决方案


                        List {
                               ForEach(viewModel.addresses) { address in
                                    {
                                        Text("\(address.displayAddress())")
                                          .onTapGesture{
                                             self.viewModel.selectedAddress = address

                                        }
                                      }
                                }
                         }

可能会奏效。


推荐阅读