UINavigationController 后退按钮标题不会动态更新
UINavigationController back button title doesn't update dynamically
我的视图控制器中有一个文本字段,我想为后退按钮显示一个自定义标题。这是为了表示在文本字段中所做的更改。
override func viewDidLoad() {
super.viewDidLoad()
// Update back button in the nav bar
updateBackButton()
// Text field delegation
nameTextField.delegate = self
nameTextField.addTarget(self, action: "updateBackButton", forControlEvents: .EditingChanged)
}
func updateBackButton() {
let backButton = UIBarButtonItem(
title: formHasChanged ? "Cancel" : "Back",
style: .Done,
target: nil,
action: nil
)
print(backButton.title)
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
这只会影响后退按钮一次,在 viewDidLoad
方法中。在随后调用 updateBackButton()
时,没有明显的变化,即使 print(backButton.title)
确实打印了适当的输出。
为了动态更新后退按钮标题,我的方法缺少什么?
updateBackButton()
方法的打印语句的输出。
Optional("Back")
Optional("Cancel")
Optional("Back")
Optional("Cancel")
Optional("Back")
如果您想从任何控件的目标将 function
作为 action
调用,则必须将其定义为 @IBAction
并在调用时使用 :
它。就像
override func viewDidLoad() {
super.viewDidLoad()
// Update back button in the nav bar
// updateBackButton() // Now you don't need to call it here, I guess..
// Text field delegation
nameTextField.delegate = self
nameTextField.addTarget(self, action: "updateBackButton:",forControlEvents: .EditingChanged)
}
@IBAction func updateBackButton(sender: AnyObject!) {
let backButton = UIBarButtonItem(
title: formHasChanged ? "Cancel" : "Back",
style: .Done,
target: nil,
action: nil
)
print(backButton.title!)
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
更新:
尝试更改此行
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
和
navigationController?.navigationBar.topItem?.leftBarButtonItem = backButton
或简单地 navigationItem.leftBarButtonItem = backButton
PS :它不会向您显示 <
符号,但我认为您不需要它,因为您正在处理 cancel
和done
.
它现在可以工作了。希望这对你也有用!
我的视图控制器中有一个文本字段,我想为后退按钮显示一个自定义标题。这是为了表示在文本字段中所做的更改。
override func viewDidLoad() {
super.viewDidLoad()
// Update back button in the nav bar
updateBackButton()
// Text field delegation
nameTextField.delegate = self
nameTextField.addTarget(self, action: "updateBackButton", forControlEvents: .EditingChanged)
}
func updateBackButton() {
let backButton = UIBarButtonItem(
title: formHasChanged ? "Cancel" : "Back",
style: .Done,
target: nil,
action: nil
)
print(backButton.title)
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
这只会影响后退按钮一次,在 viewDidLoad
方法中。在随后调用 updateBackButton()
时,没有明显的变化,即使 print(backButton.title)
确实打印了适当的输出。
为了动态更新后退按钮标题,我的方法缺少什么?
updateBackButton()
方法的打印语句的输出。
Optional("Back")
Optional("Cancel")
Optional("Back")
Optional("Cancel")
Optional("Back")
如果您想从任何控件的目标将 function
作为 action
调用,则必须将其定义为 @IBAction
并在调用时使用 :
它。就像
override func viewDidLoad() {
super.viewDidLoad()
// Update back button in the nav bar
// updateBackButton() // Now you don't need to call it here, I guess..
// Text field delegation
nameTextField.delegate = self
nameTextField.addTarget(self, action: "updateBackButton:",forControlEvents: .EditingChanged)
}
@IBAction func updateBackButton(sender: AnyObject!) {
let backButton = UIBarButtonItem(
title: formHasChanged ? "Cancel" : "Back",
style: .Done,
target: nil,
action: nil
)
print(backButton.title!)
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
更新:
尝试更改此行
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
和
navigationController?.navigationBar.topItem?.leftBarButtonItem = backButton
或简单地 navigationItem.leftBarButtonItem = backButton
PS :它不会向您显示 <
符号,但我认为您不需要它,因为您正在处理 cancel
和done
.
它现在可以工作了。希望这对你也有用!