2016-06-02 16 views
8

In precedenza avevo uno searchController.searchBar nella vista dell'intestazione del mio UITableView ma volevo aggiungere pulsanti per cambiare l'array visualizzato. Ora che ho aggiunto uno UISearchBar nello storyboard, sto cercando di capire come collegarlo al mio UISearchController in modo da poter aggiornare correttamente i risultati. Tuttavia, anche nel nuovo XCode abbiamo ancora UIDisplayController nell'IB.Come posso collegare uno storyboard UISearchBar a un UISearchController creato a livello di codice?

Due modi che penso possano risolvere questo, o c'è un modo per connetterli e io non lo so oppure uso solo il searchBar nativo per searchController e spostare il frame in cui lo voglio. Sono riluttante a provare il secondo a causa dei vantaggi di AutoLayout per il dimensionamento.

risposta

0

Ho sempre inserito una vista segnaposto nel file di builder dell'interfaccia alto 44 punti. È quindi possibile aggiungere SearchController.view come figlio di questa vista contenitore.

@IBOutlet weak var searchContainerView: UIView! 

    fileprivate lazy var searchController: UISearchController = { 
     let contactSearchViewController = self.storyboard?.instantiateViewController(withIdentifier: String(describing: ContactSearchViewController.self)) as! ContactSearchViewController 
     contactSearchViewController.delegate = self 
     contactSearchViewController.datasource = self 
     let searchController = UISearchController(searchResultsController: contactSearchViewController) 
     searchController.searchResultsUpdater = contactSearchViewController 
     searchController.dimsBackgroundDuringPresentation = false 
     searchController.definesPresentationContext = true 
     return searchController 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     searchContainerView.addSubview(searchController.searchBar) 
     let attributes: [NSLayoutAttribute] = [.top, .bottom, . left, .right] 
     NSLayoutConstraint.activate(attributes.map{NSLayoutConstraint(item: self.searchController.searchBar, attribute: $0, relatedBy: .equal, toItem: self.searchContainerView, attribute: $0, multiplier: 1, constant: 0)}) 
    } 
Problemi correlati