ios - UINavigationController 后退按钮标题不会动态更新

标签 ios swift uinavigationcontroller

我的 View Controller 中有一个文本字段,我想显示后退按钮的自定义标题。这是为了表示在文本字段中所做的更改。

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 语句的输出。

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 = backButtonnavigationController?.navigationBar.topItem?.leftBarButtonItem = backButton或者简单地 navigationItem.leftBarButtonItem = backButton

PS:它不会显示给你<符号,但我认为您在处理 cancel 时不需要它和 done .

它现在工作。希望这对你也有用!

关于ios - UINavigationController 后退按钮标题不会动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474078/

相关文章:

ios - UINavigationBar BarButtomItem 不会 swift 解除 View Controller

ios - 导航到同一屏幕,但来自两个不同的 View Controller

iphone - UIPasteboard 对象中的泄漏

ios - App Build 未出现在 App Store Connect 提交仪表板上

swift - 单文件优化与整个模块优化之间有什么区别

swift - iOS RxSwift - 如何解包 `Optional<Optional<T>>` 或 `T??`?

ios - Swift 调用 setNavigationBarHidden 但 View 不会移动到顶部

ios - popViewControllerAnimated 后 UITextField 内容为空

iphone - iOS 设置.plist

iOs模拟器运行缓慢