2016-05-25 6 views
6

Ich habe Navigation benutzerdefinierte Klasse erstellt und ich wollte es dekorieren, nahm ich NavDecoration.swift Klasse und deklarierte Erweiterung, die in unten Code gezeigt hat, fügte ich Such-Barcode auch in dieser Funktion, ich wollte Suchleiste Delegat in diesem festlegen Erweiterung aber seine geben Fehler kann vom Typ ‚UIViewController‘ eingeben ‚UISearchBarDelegateWie setze ich den Delegaten der Suchleiste von viewController mit der Erweiterung?

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 
}} 

Antwort

1

** ich habe getan, nur um wenige Linie ändern Code **

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

Sie zu UISearchBarDelegate Protokoll entsprechen müssen nicht zuweisen:

extension UINavigationController : UISearchBarDelegate { 
    ... 
} 
+0

Ich habe alles bereit gemacht und wenn ich das tue searchBar.delegate = Viewcontroller wie, dass seine mir geben gleichen Fehler nicht vergeben vom Typ ‚UIViewController‘ eingeben ‚UISearchBarDelegate – IOSDev

+1

Sie Uiviewcontroller statt UINavigationController als Delegierter zuweisen. Wenn Ihre Erweiterung wie oben ist, müssen Sie searchBar.delegate = viewController.navigationController setzen. – stefos