cellForRowAtIndex 没有被调用

cellForRowAtIndex not getting called

我将 ViewController 中的 UITableView 填充为具有 Google 自动完成功能的 UISearchController。但是,cellForRowAtIndex 没有被调用断点什么都不做。

我查过的;

虽然,当我使用 UISearchController 实现与主 ViewController 相同的代码时,它工作正常。这可能是因为 UISearchController 是不同的 ViewController?

有什么想法吗?非常感谢任何帮助。- 下面的代码;

地图控制器

class MapController: UIViewController {

private let resultsController = ResultsController()
private let searchController = UISearchController(searchResultsController: ResultsController())
private let locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    GoogleMapsService.shared.configureMapView(to: self)
    GoogleMapsService.shared.googleMapsView.delegate = self
    configureNavigationController()
    edgesForExtendedLayout = []
    definesPresentationContext = true
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    configureLocationManager()
}

func configureNavigationController() {
    guard let navigationController = navigationController else { return }
    navigationController.navigationBar.isTranslucent = false
    navigationController.navigationBar.barTintColor = .white
    navigationItem.titleView = searchController.searchBar
    searchController.delegate = resultsController
    searchController.searchResultsUpdater = resultsController
    searchController.configureSearchController()
    }
}

结果控制器

class ResultsController: UIViewController {

    private let tableView = UITableView()
    private let searchResultsCellIdentifier = "searchResultsCellIdentifier"
    private var gmsPlacesClient = GMSPlacesClient()
    private var searchResults = [GMSAutocompletePrediction]()

    lazy var filteredResults: GMSAutocompleteFilter = {
        let filteredResults = GMSAutocompleteFilter()
        filteredResults.type = .address
        return filteredResults
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        configureTableView()
    }

    func configureTableView() {
        tableView.delegate = self
        tableView.dataSource = self
        view.addSubview(tableView)
        tableView.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor,
                         paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0,
                         width: 0, height: 0)
        tableView.tableFooterView = UIView()
        tableView.register(ResultsCell.self, forCellReuseIdentifier: searchResultsCellIdentifier)
        tableView.keyboardDismissMode = .interactive
        tableView.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 243/255, alpha: 1)
    }
}

extension ResultsController: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return searchResults.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let searchResultsCell = tableView.dequeueReusableCell(withIdentifier: searchResultsCellIdentifier, for: indexPath) as! ResultsCell
        let result = searchResults[indexPath.row]
        searchResultsCell.result = result
        return searchResultsCell
    }
}

您正在使用 ResultsController 的两个不同实例,因为每次调用默认初始化程序 ResultsController() 都会创建一个新实例。

一个解决方案是延迟声明searchController

private lazy var searchController : UISearchController = { 
    return UISearchController(searchResultsController: resultsController) 
}()