我是 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 操作,前两个项目注册点击,正如您在选择第二个选项时从突出显示中看到的那样,但是当在第二个选项下选择任何元素时,您会看到交互发生与表格。
当我没有偏移量或分隔符时,列表将呈现在屏幕底部,远低于表单,并调用所有按钮操作。所以我猜想拦截点击事件的表单存在问题,而不是我的建议列表。
任何人都知道我可以做些什么来解决这个问题?
谢谢