通过警报控制器更改标题
Changing Title via Alert Controller
我希望能够更改 navigationBar
中显示的标题。我有 alertController
设置并且看起来很好,但是在输入 newTitle 文本后,当前标题消失但新标题没有出现。我已尝试在 viewDidLoad
、viewWillAppear
以及按钮按下事件本身中重新加载数据(如代码所示)。欢迎任何意见。
@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
值(可能是 nil
或 empty
)。您可能希望使用警报的第一个 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
等)
我希望能够更改 navigationBar
中显示的标题。我有 alertController
设置并且看起来很好,但是在输入 newTitle 文本后,当前标题消失但新标题没有出现。我已尝试在 viewDidLoad
、viewWillAppear
以及按钮按下事件本身中重新加载数据(如代码所示)。欢迎任何意见。
@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
值(可能是 nil
或 empty
)。您可能希望使用警报的第一个 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
等)