UITextField.text值在GooglePlaceAutocomplete上无法更改

时间:2018-02-18 01:02:14

标签: swift uitextfield googleplacesautocomplete

我正在使用Swift 4在iOS 11上使用表单应用程序。我想将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)
}

2 个答案:

答案 0 :(得分:1)

直接更改单元格可能不是一个好主意,因为每次重新加载UITableView时,单元格都会被回收,并且根据您的tableView(_:cellForRowAt:)实现,您的UITextField可能会被覆盖或结束在其他地方。

最好在视图控制器中使用某种模型或状态,它保存不同部分中每个单元格的状态。

在GooglePlacesAutocomplete委托中更改此状态(例如地名列表),并在reloadData上致电tableView以获取更改后的状态中的新数据。

tableView(_:cellForRowAt:)实施中,您在返回之前设置inputTextField.text = place.name,这样所有单元格都应该从您的内部状态中找到正确的地名。

答案 1 :(得分:0)

好!我明白你所说的Kie和你是对的。我会实现一些东西来保存我的字段值。 但就我而言,GMSAutocompleteViewController重新加载了我的UITableView,因为它是用present()调用的。我改变了它,将它添加到我的navigationController,现在我的字段仍然存在。

由于