如何解决如何在弹出视图控制器中更新 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 {
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。