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,现在我的字段仍然存在。

谢谢