2014-09-08 22 views
8

programında değiştirerek değiştiriyorum. Bu nedenle, viewWillAppear öğesinde soldaki gezinme çubuğu düğmesini değiştirmeye çalışıyorum (öğenin ileri ve geri değişmesi gerekiyor, bu nedenle viewDidLoad çalışmayacak). Ben viewWillAppear aşağıdaki kodu vardır: nav çubuğu öğelerini 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" 

Her satır yürütüldüğünde emin olmak için hata ayıklayıcı kullandı. Ancak 'leftBarButtonItem' güncellenmedi. Nav bar şeyler ancak başarıyla güncellendi. Şimdi hamleler bitti. Fikirler? Teşekkürler!

cevap

28

Aşağıdaki kod çalışması gerekir:

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

} 

Sen this previous question ile navigationItem özellikleri hakkında daha fazla bilgi edinebilirsiniz:

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

} 

gerçekten viewWillAppear: bunu gerçekleştirmek için gerekirse, burada kodudur.

+0

Sadece kafasındaki çiviyi vurdun. 'navigationItem.leftBarButtonItem' gitmek için yoldur. Çok teşekkürler! –

+0

Muhtemelen bunu "viewWillAppear" uygulamasında yapmak istemezsiniz, VC'nin sunulduğu her seferinde çağrılır - viewDidLoad gibi bir şey daha uygun olur. – Zorayr

+0

@Zorayr: Haklısınız. 'ViewWillAppear' ancak 'viewDidLoad' denilen soru kesinlikle bu kod için daha iyi bir yer. Kod güncellendi. –

İlgili konular