So I'm trying to change the left nav bar button item in viewWillAppear (the item needs to be changed back and forth, so viewDidLoad won't work). I have the following code in viewWillAppear:
所以我正在尝试更改viewWillAppear中的左侧导航栏按钮项(该项需要来回更改,因此viewDidLoad将无法工作)。我在viewWillAppear中有以下代码:
// 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"
I used debugger to make sure every line is executed. But the 'leftBarButtonItem' wasn't updated. nav bar stuff however got updated successfully. I'm out of moves now. Ideas? Thanks!
我使用调试器来确保每一行都被执行。但是'leftBarButtonItem'没有更新。导航栏的东西,但成功更新。我现在没动了。想法?谢谢!
1 个解决方案
#1
28
The following code should work:
以下代码应该工作:
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")
}
}
If you really need to perform it in viewWillAppear:
, here is the code:
如果你真的需要在viewWillAppear:中执行它,这里是代码:
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")
}
}
You can learn more about the navigationItem
properties with this previous question.
您可以使用上一个问题了解有关navigationItem属性的更多信息。
#1
28
The following code should work:
以下代码应该工作:
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")
}
}
If you really need to perform it in viewWillAppear:
, here is the code:
如果你真的需要在viewWillAppear:中执行它,这里是代码:
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")
}
}
You can learn more about the navigationItem
properties with this previous question.
您可以使用上一个问题了解有关navigationItem属性的更多信息。