Как получить результаты поиска, чтобы прокрутить верхнюю часть таблицы? - PullRequest
0 голосов
/ 20 октября 2019

Ранее мои результаты поиска показывались обрезанными, и мне приходилось прокручивать вверх-вниз, чтобы увидеть полные результаты

Где я хочу, чтобы результаты переходили на верх таблицы, как только я начинаю что-то набирать вмоя строка поиска.

код, который я использую, чтобы заставить его работать, работает в первый раз, но затем я получаю ошибку SIGABRT в AppDelegate, как только я набираюв новом поиске.

productListTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)

▲ есть код, который использовался для отображения результатов поиска в верхней части таблицы, но как только я набираю что-то новое, симулятор закрывается для меня. я пытаюсь получить результаты ненависти в топе каждый раз, когда я нажимаю в новом поиске

extension ProductListController : UISearchBarDelegate, UISearchDisplayDelegate {

        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            productInventory = self.productSetup.filter({ (products) -> Bool in
                return products.name.range(of: searchText, options: [ .caseInsensitive, .diacriticInsensitive ]) != nil 
                })

        self.productListTableView.reloadData()

      // Code that scrolls search results to the top of the tableview ▼

        self.productListTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
    }


    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        searchActive = true;
    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        searchActive = false;
        self.searchBar.endEditing(true)
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searchActive = false;
        self.searchBar.endEditing(true)
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        searchActive = false;
        self.searchBar.endEditing(true)
    }
}

Я пытался использовать следующее из стека, чтобы помочь, но безуспешно

UITableView - прокрутите к началу

Как получить UITableview, чтобы перейти к началу страницы при перезагрузке?

Как обновить мой UITableViewс UISearchBar после нажатия кнопки отмены UISearchBar?

1 Ответ

1 голос
/ 20 октября 2019

Во-первых, перед прокруткой строки (0,0) необходимо проверить, что она существует:

if !self.productInventory.isEmpty {
    self.productListTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
}

секунда, reloadData() может произойти не сразу - это может произойти при следующем цикле выполнения. Таким образом, вы должны завернуть свиток в блок отправки:

DispathQueue.main.async {
    if !self.productInventory.isEmpty {
        self.productListTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...