Я пытаюсь написать простой UITableView с UISearchBar. У меня нет проблем, когда я перетаскиваю UITableViewController. Все работает! (см. код ниже)
override func viewDidLoad() {
super.viewDidLoad()
self.searchResultsController = UISearchController(searchResultsController: nil) //initialize the search controller
self.searchResultsController.searchResultsUpdater = self //the search controller updater is this view
self.searchResultsController.dimsBackgroundDuringPresentation = false
self.searchResultsController.searchBar.sizeToFit()
self.searchResultsController.searchBar.searchBarStyle = UISearchBarStyle.Minimal
self.searchResultsController.searchBar.showsCancelButton = true
self.tableView.tableHeaderView = searchResultsController.searchBar
self.tableView.reloadData()
}
Но теперь, в экспериментальных целях, я использовал UIViewController и добавил UITableView, без проблем с отображением моих записей в таблице.
Затем добавил UISearchBar из раскадровки, установил его делегат на UIViewController, но метод updateSearchResultsForSearchController не вызывается, когда пользователь что-то вводит.
Это похоже на то, что мой UISearchController понятия не имеет, что есть UISearchBar, и что бы я ни вводил, не вызывает метод обновления. Должен ли я сказать UISearchController, что это ваш UISearchBar?
Итак, вот мой код:
class SearchViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate, UISearchControllerDelegate
{
@IBOutlet weak var mySearchBar: UISearchBar!
@IBOutlet weak var myViewTable: UITableView!
let allElements = ["H", "Li", "Na", "K", "Rb", "Cs", "Fr"]
var filteredElemetns = [String]()
var searchResultsController = UISearchController() //create a new search controller
override func viewDidLoad()
{
super.viewDidLoad()
self.searchResultsController = UISearchController(searchResultsController: nil) //initialize the search controller
self.searchResultsController.searchResultsUpdater = self //the search controller updater is this view
self.searchResultsController.dimsBackgroundDuringPresentation = false
self.searchResultsController.searchBar.sizeToFit()
self.searchResultsController.searchBar.searchBarStyle = UISearchBarStyle.Minimal
self.searchResultsController.searchBar.delegate = self
//self.myViewTable.tableHeaderView = self.searchResultsController.searchBar
}
Если я раскомментирую последнюю строку, то у меня будет два UISearchBar, один из которых добавляется раскадровкой, а другой - с кодом последней строки. Тот, что я добавил, не работает, а тот, что вверху myViewTable, работает.