UITextField.text GooglePlaceAutocomplete 上的值不会改变
UITextField.text value won't change on GooglePlaceAutocomplete
我正在使用 Swift 4 在 iOS 11 上开发一个表单应用程序。我想将 return 的 Google 选择器(PlaceAutocomplete ) 在我的 UITableView 的一个单元格的 UITextField 中。问题是尽管分配了新值,文本字段仍为空白。调试了一段时间后,似乎在选择位置时有些东西丢弃了我的 UITextField 的内容。
这些是具有结果值分配的 GooglePlaceAutocomplete 回调:
extension MyUITableViewController, GMSAutocompleteViewControllerDelegate {
func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
print("Place name: \(place.name)")
let indexPath4 = IndexPath(row: 4, section: 0)
let cell4 = tableView.cellForRow(at: indexPath4) as! InputPlacePicker
cell4.inputTextField.text = place.name
dismiss(animated: true, completion: nil)
}
func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
print("Error: ", error.localizedDescription)
}
func wasCancelled(_ viewController: GMSAutocompleteViewController) {
dismiss(animated: true, completion: nil)
}
}
这是对 GooglePlaceAutocomplete
的调用
@objc func pickPlace() {
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self
present(autocompleteController, animated: true, completion: nil)
}
直接更改单元格可能不是一个好主意,因为每次重新加载 UITableView
时,单元格都会被回收,并且根据您的 tableView(_:cellForRowAt:)
实施,您的 UITextField
可能会被覆盖或最终在其他地方。
在您的视图控制器中拥有某种模型或状态是更好的做法,它保存不同部分中每个单元格的状态。
在您的 GooglePlacesAutocomplete 委托中更改此状态(例如地名列表)并在您的 tableView
上调用 reloadData
以从更改后的状态获取新数据。
在您的 tableView(_:cellForRowAt:)
实现中,您在 return 之前设置了 inputTextField.text = place.name
,这样所有单元格都应该以内部状态中的正确地名结束。
好的!我明白你说的,基,你是对的。我将实施一些措施来保存我的字段值。
但在我的例子中,是 GMSAutocompleteViewController 重新加载了我的 UITableView,因为它是用 present() 调用的。我将其更改为将其添加到我的 navigationController,现在我的字段仍然存在。
谢谢
我正在使用 Swift 4 在 iOS 11 上开发一个表单应用程序。我想将 return 的 Google 选择器(PlaceAutocomplete ) 在我的 UITableView 的一个单元格的 UITextField 中。问题是尽管分配了新值,文本字段仍为空白。调试了一段时间后,似乎在选择位置时有些东西丢弃了我的 UITextField 的内容。
这些是具有结果值分配的 GooglePlaceAutocomplete 回调:
extension MyUITableViewController, GMSAutocompleteViewControllerDelegate {
func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
print("Place name: \(place.name)")
let indexPath4 = IndexPath(row: 4, section: 0)
let cell4 = tableView.cellForRow(at: indexPath4) as! InputPlacePicker
cell4.inputTextField.text = place.name
dismiss(animated: true, completion: nil)
}
func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
print("Error: ", error.localizedDescription)
}
func wasCancelled(_ viewController: GMSAutocompleteViewController) {
dismiss(animated: true, completion: nil)
}
}
这是对 GooglePlaceAutocomplete
的调用@objc func pickPlace() {
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self
present(autocompleteController, animated: true, completion: nil)
}
直接更改单元格可能不是一个好主意,因为每次重新加载 UITableView
时,单元格都会被回收,并且根据您的 tableView(_:cellForRowAt:)
实施,您的 UITextField
可能会被覆盖或最终在其他地方。
在您的视图控制器中拥有某种模型或状态是更好的做法,它保存不同部分中每个单元格的状态。
在您的 GooglePlacesAutocomplete 委托中更改此状态(例如地名列表)并在您的 tableView
上调用 reloadData
以从更改后的状态获取新数据。
在您的 tableView(_:cellForRowAt:)
实现中,您在 return 之前设置了 inputTextField.text = place.name
,这样所有单元格都应该以内部状态中的正确地名结束。
好的!我明白你说的,基,你是对的。我将实施一些措施来保存我的字段值。 但在我的例子中,是 GMSAutocompleteViewController 重新加载了我的 UITableView,因为它是用 present() 调用的。我将其更改为将其添加到我的 navigationController,现在我的字段仍然存在。
谢谢