2016-05-25 11 views
6

Ho creato la classe personalizzata di navigazione e volevo decorarla, ho preso la classe NavDecoration.swift e l'estensione dichiarata che è stata mostrata nel codice sottostante, ho aggiunto anche il codice della barra di ricerca in questa funzione, ho voluto impostare il delegato della barra di ricerca in questo estensione ma il suo dare errore non può assegnare di tipo 'UIViewController' digitare 'UISearchBarDelegateCome impostare un delegato della barra di ricerca di viewController usando l'estensione?

extension UINavigationController { 
func makeBlackNavigationbar (viewController: UIViewController, animated: Bool) { 

viewController.navigationController?.navigationBar.backgroundColor? = UIColor.blackColor() 
    let add = UIBarButtonItem(barButtonSystemItem: .Add, target: viewController, action: "addTapped") 
    let play = UIBarButtonItem(title: "Play", style: .Plain, target: viewController, action: "addTapped") 
    viewController.navigationItem.rightBarButtonItems = [add, play] 

    let left = UIBarButtonItem(barButtonSystemItem: .Add, target: viewController, action: "addTapped") 
    viewController.navigationItem.leftBarButtonItems = [left] 

     let searchBar = UISearchBar(frame: CGRectZero) 
     searchBar.placeholder = "Search" 
     searchBar.delegate = viewController 
     viewController.navigationItem.titleView = searchBar 
}} 

risposta

1

** ho fatto cambiando solo qualche linea di codice **

extension UIViewController : UISearchBarDelegate { 

func makeBlackNavigationbar (viewController: UIViewController, animated: Bool) { 

    viewController.navigationController?.navigationBar.backgroundColor? = UIColor.blackColor() 
    let add = UIBarButtonItem(barButtonSystemItem: .Add, target: viewController, action: "addTapped") 
    let play = UIBarButtonItem(title: "Play", style: .Plain, target: viewController, action: "addTapped") 
    viewController.navigationItem.rightBarButtonItems = [add, play] 
    let left = UIBarButtonItem(barButtonSystemItem: .Add, target: viewController, action: "addTapped") 
    viewController.navigationItem.leftBarButtonItems = [left] 

     let searchBar = UISearchBar(frame: CGRectZero) 
     searchBar.placeholder = "Search" 
     searchBar.delegate = viewController 
     viewController.navigationItem.titleView = searchBar 
}} 
2

Devi conformarsi alle UISearchBarDelegate protocollo:

extension UINavigationController : UISearchBarDelegate { 
    ... 
} 
+0

ho fatto tutto pronto e quando lo faccio searchBar.delegate = viewController così la sua darmi lo stesso errore non può assegnare di tipo 'UIViewController' digitare 'UISearchBarDelegate – IOSDev

+1

È assegnando UIViewController invece di UINavigationController come delegato. Se la tua estensione è come sopra devi impostare searchBar.delegate = viewController.navigationController. – stefos

Problemi correlati