Таблица с поиском - Поиск работает хорошо, но при выборе элемента отображается неверный элемент - PullRequest
0 голосов
/ 24 декабря 2018

У меня проблема с tableView, где я отображаю некоторые значения для выбора пользователем.Он связан с панелью поиска, которая фильтрует содержимое в массиве, отображаемом в TableView.

Таким образом, проблема заключается в следующем: Когда я ищу элемент, tableView отлично фильтрует, отображая правильный элемент.Но если я решу выбрать этот элемент, он будет отображать первый элемент, который был показан с начала, то есть с загрузки всех элементов в textView.Как будто мой tableView отображает только текст, но не правильный indexPath при поиске.

Вот код:

    extension SelectCityViewController: UITableViewDataSource, UITableViewDelegate {
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if searching {
            return searchCity.count
        } else {
            return citiesItems.count
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        if searching {
            cell?.textLabel?.text = searchCity[indexPath.row]
        } else {
            cell?.textLabel?.text = citiesItems[indexPath.row]
        }
        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        toastMessage(message: "\(citiesItems[indexPath.row]) selected")
        SelectCityViewController.selectedCity="\(citiesItems[indexPath.row])"
        self.removeAnimate()
    }

}

extension SelectCityViewController: UISearchBarDelegate {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchCity = citiesItems.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
        searching = true
        tableView.reloadData()
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searching = false
        searchBar.text = ""
        tableView.reloadData()
    }

1 Ответ

0 голосов
/ 24 декабря 2018

Вы должны проверить, является ли состояние searching / не в didSelectRowAt

if searching {
   selectCityViewController.selectedCity = searchCity[indexPath.row]
 }
 else {
   selectCityViewController.selectedCity = citiesItems[indexPath.row]
 }

Короткий путь также

selectCityViewController.selectedCity = searching ? searchCity[indexPath.row] : citiesItems[indexPath.row]

Также если тип searchCity[indexPath.row] / citiesItems[indexPath.row] - это String, тогда нет необходимости в "\()"

...