2014-09-08 16 views
8

Vì vậy, tôi đang cố gắng thay đổi mục nút thanh điều hướng bên trái trong chế độ xemWillAppear (mục cần được thay đổi qua lại, vì vậy viewDidLoad sẽ không hoạt động). Tôi có mã sau trong chế độ xemWillAppear:thay đổi mục thanh điều hướng theo lập trình trong 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" 

Tôi đã sử dụng trình gỡ lỗi để đảm bảo mọi dòng được thực thi. Nhưng 'leftBarButtonItem' không được cập nhật. Tuy nhiên, công cụ thanh điều hướng đã được cập nhật thành công. Tôi không còn di chuyển nữa. Ý tưởng? Cảm ơn!

Trả lời

28

Các mã sau đây nên làm việc:

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

} 

Nếu bạn thực sự cần phải thực hiện nó trong viewWillAppear:, đây là mã:

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

} 

Bạn có thể tìm hiểu thêm về navigationItem tính với this previous question.

+0

Bạn chỉ cần chạm vào móng trên đầu. 'navigationItem.leftBarButtonItem' là con đường để đi. Cảm ơn rất nhiều! –

+0

Bạn có thể không muốn làm điều này trong 'viewWillAppear', nó sẽ được gọi mỗi khi VC được trình bày - một cái gì đó giống như' viewDidLoad' sẽ phù hợp hơn. – Zorayr

+0

@Zorayr: Bạn hoàn toàn đúng. Câu hỏi được đề cập đến 'viewWillAppear' nhưng' viewDidLoad' chắc chắn là một nơi tốt hơn cho mã này. Đã cập nhật mã. –

Các vấn đề liên quan