2014-09-08 12 views
8

ändern Ich versuche, die linke nav bar-Schaltfläche Element in ViewWillAppear ändern (das Element muss hin und her geändert werden, damit viewDidLoad nicht funktioniert). Ich habe den folgenden Code in viewWillAppear:nav bar item programmatically in Swift

 // There is a diff 'left bar button item' defined in storyboard. I'm trying to replace it with this new one 
     var refreshButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Refresh, target: self, action: {}) 
     self.navigationController.navigationItem.leftBarButtonItem = refreshButton 
     // title and color of nav bar can be successfully changed 
     self.navigationController.navigationBar.barTintColor = UIColor.greenColor() 
     self.title = "Search result" 

Ich verwendet Debugger, um sicherzustellen, dass jede Zeile ausgeführt wird. Aber das 'leftBarButtonItem' wurde nicht aktualisiert. Nav-Bar-Zeug wurde jedoch erfolgreich aktualisiert. Ich habe jetzt keine Bewegung mehr. Ideen? Vielen Dank!

Antwort

28

sollte der folgende Code arbeiten:

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let refreshButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Refresh, target: self, action: "buttonMethod") 
     navigationItem.leftBarButtonItem = refreshButton 

     navigationController?.navigationBar.barTintColor = UIColor.greenColor() 
     title = "Search result" 
    } 

    func buttonMethod() { 
     print("Perform action") 
    } 

} 

Wenn Sie es wirklich in viewWillAppear: durchführen müssen, hier ist der Code:

import UIKit 

class ViewController: UIViewController { 

    var isLoaded = false 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     if !isLoaded { 
      let refreshButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Refresh, target: self, action: "buttonMethod") 
      navigationItem.leftBarButtonItem = refreshButton 
      isLoaded = true 

      navigationController?.navigationBar.barTintColor = UIColor.greenColor() 
      title = "Search result" 
     } 
    } 

    func buttonMethod() { 
     print("Perform action") 
    } 

} 

Sie mehr über die navigationItem Eigenschaften mit this previous question lernen können.

+0

Sie treffen nur den Nagel auf den Kopf. 'navigationItem.leftBarButtonItem' ist der richtige Weg. Danke vielmals! –

+0

Sie wollen das wahrscheinlich nicht in 'viewWillAppear' machen, es wird jedes Mal aufgerufen, wenn der VC präsentiert wird - etwas wie' viewDidLoad' würde besser passen. – Zorayr

+0

@Zorayr: Du hast vollkommen recht. Die Frage "viewWillAppear" aber "viewDidLoad" ist definitiv ein besserer Platz für diesen Code. Code aktualisiert –