2015-02-15 12 views
5

Mam klasę UITableViewController, w której implementuję kod UISearchController. Dodałem następujące delegatów:Jak ustawić obiekt UITableViewController zgodny z protokołem UISearchResultsUpdating?

class EmployeesTableView: UITableViewController, NSFetchedResultsControllerDelegate,UISearchResultsUpdating{ 

Jestem importowanie zarówno UIKit i CoreData. Otrzymuję następujący błąd:

"Type 'CustomTableViewController' does not conform to protocol UISearchResultsUpdating" 

Co muszę zrobić, aby kontroler był zgodny z protokołem?

+0

Czy masz klasę o nazwie "CustomTableViewController"? – gagarwal

Odpowiedz

8

Po dodaniu protokołów do definicji klasy, najprostszym sposobem jest przejechanie kursorem myszy nad nazwą protokołu i poleceniem kliknij jego nazwę. To pociągnie za sobą jego definicję. W przypadku definicji protokołów zwykle mają one metody bezpośrednio za nimi. Jeśli wymagana jest metoda, będzie ona na górze, jeśli ma opcjonalne z przodu, to nie jest wymagana w celu dostosowania.

W przypadku `UISearchResultsUpdating, ma tylko jedną metodę i jest wymagana. Po prostu skopiuj metodę lub wiele metod i kliknij strzałkę wstecz, aby wrócić do swojej klasy. Wklej metody do swojej klasy i zaimplementuj je. Jeśli były to metody opcjonalne (w tym przypadku nie ma żadnych metod opcjonalnych), usuń opcjonalne z przodu. To właśnie skopiowałem z definicji.

func updateSearchResultsForSearchController(searchController: UISearchController) 

Następnie aktualizujesz, aby zrobić to, co chcesz.

func updateSearchResultsForSearchController(searchController: UISearchController) { 
    //do whatever with searchController here. 
} 

Jako dodatkowy przykład, kliknij polecenie NSFechedResultsControllerDelegate. Przekonasz się, że nie ma wymaganych metod, ale wiele opcjonalnych. Te informacje zwykle znajdują się również w dokumentacji, ale znalazłem polecenie + kliknij, aby być najszybszym sposobem na znalezienie tego, czego szukam.

17

Swift 3:

func updateSearchResults(for searchController: UISearchController) { 

// code here 

} 
+0

[Jak odpowiedzieć] (http://stackoverflow.com/help/how-to-nswer) - przeczytaj go przed opublikowaniem. – AgataB

+0

Hej @AgataB, twój odnośnik odwołuje się do niepoprawnego adresu URL - powinien być [Jak odpowiedzieć] (http://stackoverflow.com/help/how-to-answer) –

+2

Nie wiesz, gdzie jest problem - aby kontroler był zgodny protokół, składnia wymaganej metody w Swift 3 zmieniła się zgodnie z powyższym. –

5

Swift 3,0

//Make sure to import UIKit 
import Foundation 
import UIKit 

class ViewController: UIViewController, UISearchBarDelegate { 

    var searchController = UISearchController() 

    override func viewDidLoad() { 
      //Setup search bar 
      searchController = UISearchController(searchResultsController: nil) 
      searchController.dimsBackgroundDuringPresentation = false 
      definesPresentationContext = true 
      //Set delegate 
      searchController.searchResultsUpdater = self 
      //Add to top of table view 
      tableView.tableHeaderView = searchController.searchBar 
    } 
} 
extension ViewController: UISearchResultsUpdating { 
    func updateSearchResults(for searchController: UISearchController) { 
      print(searchController.searchBar.text!) 
    } 
}