从gmsautocpommentsultsviewController中选择位置时,请显示Segue(以编程方式显示)



我通过演出segue遇到了一些问题。我已经能够使用当前的选择,但是想使用推送/显示导航堆栈。我遇到了这个错误..."现有的过渡或演示文稿正在发生;导航堆栈将不会更新。"感谢提前的任何帮助!

//从homecontroller

seegue to searchvc
    func handleSearch() {
        let vc = SearchVC()
        show(vc, sender: self)
    }

//searchvc类中的设置搜索栏

    func loadPlacesSearchBar() {
        searchController?.searchBar.isHidden = false
        resultsViewController = GMSAutocompleteResultsViewController()
        resultsViewController?.delegate = self
        searchController = UISearchController(searchResultsController: resultsViewController)
        searchController?.searchResultsUpdater = resultsViewController
        // Put the search bar in the navigation bar.
        searchController?.searchBar.sizeToFit()
        navigationItem.titleView = searchController?.searchBar
        searchController?.searchBar.placeholder = "search places"
        // When UISearchController presents the results view, present it in
        // this view controller, not one further up the chain.
        definesPresentationContext = true
        // Prevent the navigation bar from being hidden when searching.
        searchController?.hidesNavigationBarDuringPresentation = false
    }

//searchvc

扩展
extension SearchVC: GMSAutocompleteResultsViewControllerDelegate {
    func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                           didAutocompleteWith place: GMSPlace) {
        searchController?.isActive = false
        // Do something with the selected place.
        let autocompleteController = GMSAutocompleteViewController()
        autocompleteController.delegate = self as? GMSAutocompleteViewControllerDelegate
        print("Place name: (place.name)")
        print("Place address: (String(describing: place.formattedAddress))")
        print("Place attributions: (String(describing: place.attributions))")
        self.dismiss(animated: true, completion: nil)
        let mapView = MapViewController()
        show(mapView, sender: self)
//        let mapView = MapViewController()
//        let navController = UINavigationController(rootViewController: mapView)
//        present(navController, animated: true, completion: nil)
        DispatchQueue.main.async {
            self.dismiss(animated: true, completion: nil)
        }
    }
    func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                           didFailAutocompleteWithError error: Error){
        // TODO: handle the error.
        print("Error: ", error.localizedDescription)
    }
    // Turn the network activity indicator on and off again.
    func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
        UIApplication.shared.isNetworkActivityIndicatorVisible = true
    }
    func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
        UIApplication.shared.isNetworkActivityIndicatorVisible = false
    }
}

您遇到的原因是,当您进行选择时,searchController将被解雇新视图控制器。

对我有用的非常简单的解决方案是将您的视图控制器设置为UISearchControllerDelegate,然后在searchController被驳回后调用您的SEGUE。

    searchController = UISearchController(searchResultsController: resultsViewController)
    searchController?.searchResultsUpdater = resultsViewController
    searchController?.delegate = self //<- add this

然后符合委托并实施此

extension YourViewController:UISearchControllerDelegate {
func didDismissSearchController(_ searchController: UISearchController) {
   // perform your segue, or push/present your view controller here
}

最新更新