通过警报控制器更改标题

Changing Title via Alert Controller

我希望能够更改 navigationBar 中显示的标题。我有 alertController 设置并且看起来很好,但是在输入 newTitle 文本后,当前标题消失但新标题没有出现。我已尝试在 viewDidLoadviewWillAppear 以及按钮按下事件本身中重新加载数据(如代码所示)。欢迎任何意见。

    @IBAction func changeTitleBarButtonPressed(_ sender: UIBarButtonItem) {

        let titleChange = UIAlertController(
            title: "Change Title",
            message: "Please input text to change the title",
            preferredStyle: .alert)

        titleChange.addTextField { (textField) in
            textField.placeholder = "Input new title"
        }

        titleChange.addAction(UIAlertAction(
            title: "Cancel",
            style: .cancel,
            handler: { (cancelAction) in
                titleChange.dismiss(animated: true)
        }))

        titleChange.addAction(UIAlertAction(
            title: "Change Title",
            style: .default,
            handler: { (changeAction) in
                let newTitle = self.textField?.text
                titleChange.dismiss(animated: true)
                self.navigationItem.title = newTitle
                self.imagesTableView.reloadData()
        }))

        self.present(titleChange, animated: true)

    }

唯一的问题是您从不相关的 textField 读取了 text 值(可能是 nilempty)。您可能希望使用警报的第一个 textField 而不是 self.textField?.text:

titleChange.addAction(UIAlertAction(
    title: "Change Title",
    style: .default,
    handler: { (changeAction) in
        let newTitle = titleChange.textFields![0].text // instead of `self.textField?.text`
        titleChange.dismiss(animated: true) // this line is not required. You can get rid of it freely.
        self.navigationItem.title = newTitle
}))

确保您没有在其他地方设置 navigationItem.title(例如 viewWillAppear 等)