Ios UINavigationController后退按钮标题不为';动态更新
我的视图控制器中有一个文本字段,我想显示“后退”按钮的自定义标题。这表示在文本字段中所做的更改Ios UINavigationController后退按钮标题不为';动态更新,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我的视图控制器中有一个文本字段,我想显示“后退”按钮的自定义标题。这表示在文本字段中所做的更改 override func viewDidLoad() { super.viewDidLoad() // Update back button in the nav bar updateBackButton() // Text field delegation nameTextField.delegate = self nameTextField.ad
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()
方法的print语句的输出。
如果要从任何控件的目标调用
函数作为操作
,则必须将其定义为@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?.BackbarButtonim=backButton
具有
navigationController?.navigationBar.topItem?.LeftBarButtonim=backButton
或干脆navigationItem.LeftBarButtonim=backButton
PS:它不会向您显示我看不出有什么不同。正在调用该方法,并将继续这样做。但导航返回按钮标题仍然保持不变。我遗漏了什么吗?检查表单的值是否已更改
。最好在函数内部打印它。正如我在问题中提到的,输出是正确的。我已经更新了问题以包含输出。调用该方法时,formHasChanged
包含正确的值。只是导航栏没有更新。谢谢你的坚持!一件非常有用的小事——你会如何添加可能类似标题:formHasChanged?“
:P
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
}