ios - 在弹出视图控制器中更新其值时如何更改 UIButton 文本?
问题描述
在这里,我有一个带有表格视图的 VC,其中包含带有“设置时间”按钮的单元格。当我点击“设置时间”按钮时,它会转到一个弹出屏幕。在这里我可以点击“保存时间”按钮来保存时间(例如:“1:30”)并关闭弹出窗口。
弹出窗口消失后,我想更新选择显示已保存时间的表视图行中“设置时间”按钮的文本(例如:“1:30”)。当我运行我的代码时,在弹出屏幕中保存时间后,我的按钮文本不会在表格视图中更新。
带有表视图的 VC
class TaskListViewController: UIViewController {
var savedTaskTime = [String]()
var selectedTaskTime = ""
override func viewDidLoad() {
super.viewDidLoad()
taskList.delegate = self
taskList.dataSource = self
}
// Unwind segue
@IBAction func selectTimeDidSaveTime(_ segue: UIStoryboardSegue) {
let controller = segue.source as! SelectTimeViewController
selectedTaskTime = controller.selectedTaskTime
}
}
extension TaskListViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath) as! TaskCell
// Configure timeButton title
cell.timeButton.tag = indexPath.row
if selectedTaskTime != "" {
cell.timeButton.setTitle(savedTaskTime[indexPath.row], for: .normal)
}
return cell
}
}
弹出式VC
class SelectTimeViewController: UIViewController {
var hour: String = "0"
var min: String = "00"
var selectedTaskTime = ""
@IBOutlet weak var setTimeLabel: UILabel!
@IBAction func saveTimeButton(_ sender: UIButton) {
if setTimeLabel.text != "0:00" {
selectedTaskTime = "\(hour + ":" + min)"
} else {
// *Code for error alert*
}
}
override func viewDidLoad() {
super.viewDidLoad()
updateTimeLabel()
// *Code to initialize slider*
}
// Update Time Label with Slider Value
func updateTimeLabel() {
// *Code to convert slider value to timeSet value*
setTimeLabel.text = timeSet
}
// Segue runs when unwind segue is triggered
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "setTime" {
let controller = segue.destination as! TaskListViewController
controller.selectedTaskTime = selectedTaskTime
}
}
}
解决方案
如果按钮在 tableView 中,您应该更新选定的 tableView 行;
tableView.reloadRows(at: [indexPath], with: /* .none or whatever */)
在您的情况下,您应该设法更新“controller.taskList.reloadRows”或保留选定的行并更新它
selectedTaskTime: String {
didSet {
}
}
推荐阅读
- linux - 填充变量时,Bashscript 引发命令错误
- c# - 使用自定义响应类处理 .NET5 中的错误
- javascript - 从本地模块在特定网页上运行 jquery 代码片段
- ms-access - 将带有富文本的 MS Access 365 报告导出为 Word 条带格式以及所有框等 -
- javascript - 通过变量 PHP 传递数据时 jw 播放器不起作用
- python - Python3 脚本在控制台中运行良好,但在由 crontab 执行时无法运行
- sql - Oracle SQL JSON_QUERY 忽略关键字段
- android - ESP32 在与 MIT App Inventor 2 交互时停止一切
- javascript - 如何使用内联样式显示 Flex?
- java - 如何通过 hashmap 并将键或值与扫描仪输入进行比较?