Ячейки таблицы исчезают при нажатии на панель поиска – Swift

Я реализовал функцию поиска в своем приложении для просмотра таблиц. Единственная проблема заключается в том, что когда я нажимаю на строку поиска, а затем нажимаю «Отмена», ячейки, которые ранее отображались, исчезли. Это все акции; ничего не изменилось. Когда я добавил контроллер отображения поиска, я добавил его из раскадровки без настройки.

До нажатия кнопки "Поиск"

import UIKit

class DataTableExercisesTableViewController: UITableViewController, UISearchResultsUpdating {

let exercises = ["Abs", "Arms", "Back", "Chest", "Legs", "Shoulders", "Triceps"]
var filteredTableData = [String]()
var resultSearchController = UISearchController(searchResultsController: nil)





override func viewDidLoad() {
    super.viewDidLoad()

    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        resultSearchController.searchResultsUpdater = self
        resultSearchController.dimsBackgroundDuringPresentation = false
        resultSearchController.searchBar.sizeToFit()
        resultSearchController.hidesNavigationBarDuringPresentation = false
        tableView.tableHeaderView = resultSearchController.searchBar


        return controller
    })()

    self.tableView.reloadData()

}



// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    // #warning Incomplete implementation, return the number of sections

    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if resultSearchController.active {
        return filteredTableData.count
    } else {
        return exercises.count
    }
}





override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("ExerciseCell", forIndexPath: indexPath)



    // Configure the cell...

    if (self.resultSearchController.active) {
        cell.textLabel?.text = filteredTableData[indexPath.row]

        return cell
    }
    else {
        cell.textLabel?.text = exercises[indexPath.row]

        return cell
    }
}


 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

self.tableView.reloadData()


}

func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredTableData.removeAll(keepCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
    let array = (exercises as NSArray).filteredArrayUsingPredicate(searchPredicate)
    filteredTableData = array as! [String]

    self.tableView.reloadData()
}

После нажатия кнопки "Поиск"


person Nate Grant    schedule 21.05.2016    source источник
comment
У вас где-то ошибка в коде. Опубликуйте код, который показывает/скрывает панель поиска, а также код, который фильтрует ваши данные.   -  person Duncan C    schedule 21.05.2016
comment
@DuncanC В том-то и дело. Код не установлен. Я только что добавил его в свою таблицу из библиотеки объектов в раскадровке. Вы рекомендуете какие-либо ресурсы, чтобы узнать, как настроить его?   -  person Nate Grant    schedule 21.05.2016
comment
shrikar.com/ Перейдите по этой ссылке   -  person karthik    schedule 21.05.2016
comment
В вашем коде должна быть ошибка. Пожалуйста, опубликуйте свой код.   -  person Evana    schedule 21.05.2016
comment
@DuncanC Здесь я обновил вопрос своим кодом.   -  person Nate Grant    schedule 23.05.2016
comment
@Evana Обновлено с кодом.   -  person Nate Grant    schedule 23.05.2016
comment
Попробуйте отладить свой код построчно и выяснить, сколько ячеек возвращается, когда ячейка исчезает.   -  person Evana    schedule 24.05.2016


Ответы (2)


Вы захотите реализовать метод UISearchControllerDelegate: didDismissSearchController(searchController: UISearchController)

Это вызывается, когда ваш контроллер поиска закрывается. Здесь вы можете перезагрузить данные tableView.

вы можете прочитать больше здесь: https://developer.apple.com/reference/uikit/uisearchcontrollerdelegate

person Jadsada    schedule 28.07.2016

Я только что изменил инициализацию resultSearchController, как показано ниже, и все заработало.

self.resultSearchController = ({
    let controller = UISearchController(searchResultsController: nil)
    controller.searchResultsUpdater = self
    controller.dimsBackgroundDuringPresentation = false
    controller.searchBar.sizeToFit()
    controller.hidesNavigationBarDuringPresentation = false
    tableView.tableHeaderView = controller.searchBar

    return controller
})()

```

person Paris Meta    schedule 30.07.2016