2015-02-15 15 views
5

Ho una classe UITableViewController in cui sto implementando uno UISearchController. Ho aggiunto i seguenti delegati:Come faccio a rendere UITableViewController conforme al protocollo UISearchResultsUpdating?

class EmployeesTableView: UITableViewController, NSFetchedResultsControllerDelegate,UISearchResultsUpdating{ 

Sto importando sia UIKit e CoreData. Ho ricevuto il seguente errore:

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

Cosa devo fare per rendere il controller conforme al protocollo?

+0

Avete classe denominata "CustomTableViewController"? – gagarwal

risposta

8

Quando si aggiungono i protocolli alla definizione della classe, il modo più semplice è passare il mouse sul nome del protocollo e fare clic sul suo nome. Questo tirerà su la sua definizione. Con le definizioni dei protocolli, di solito hanno metodi che li seguono immediatamente. Se è richiesto un metodo, sarà in cima, se è opzionale in testa, quindi non è necessario per conformarsi.

Nel caso di `UISearchResultsUpdating, ha solo un metodo ed è richiesto. Basta copiare il metodo o più metodi e fare clic sulla freccia indietro per tornare alla classe. Incolla i metodi nella tua classe e implementali. Se erano metodi opzionali (in questo caso non ci sono metodi opzionali), rimuovere facoltativo dal fronte. Questo è ciò che ho copiato dalla definizione.

func updateSearchResultsForSearchController(searchController: UISearchController) 

Quindi lo si aggiorna per fare ciò che si vuole fare.

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

Come esempio aggiuntivo, fare clic su comando NSFechedResultsControllerDelegate. Vedrai che non ha metodi richiesti, ma molti facoltativi. Questa informazione si trova di solito anche nella documentazione, ma ho trovato command + click per essere il modo più veloce per trovare quello che sto cercando.

17

Swift 3:

func updateSearchResults(for searchController: UISearchController) { 

// code here 

} 
+0

[Come rispondere] (http://stackoverflow.com/help/how-to-nswer) - si prega di leggerlo prima di postare. – AgataB

+0

Hey @AgataB, il tuo link fa riferimento all'URL errato - dovrebbe essere [Come rispondere] (http://stackoverflow.com/help/how-to-answer) –

+2

Non so dove sia il problema - per rendere il controller conforme a il protocollo, la sintassi per il metodo richiesto in Swift 3 è cambiata come sopra. –

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!) 
    } 
} 
Problemi correlati