Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UINavigationController后退按钮标题不为';动态更新_Ios_Swift_Uinavigationcontroller - Fatal编程技术网

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
}