如何解决如何通过位于一个 VC 中的 UITextField 将新字符串附加到数组,以填充位于另一个 VC 中的 TableView?
为什么 TableView 不显示添加的新字符串?如何解决?
在第一个 VC 中:
@IBAction func saveButtonPressed(_ sender: UIButton) {
var textField = UITextField()
let alert = UIAlertController(title: "Save current run",message: "",preferredStyle: .alert)
let action = UIAlertAction(title: "Save",style: .default) { (action) in
RunHistoryTableViewController().runArray.append(textField.text!)
RunHistoryTableViewController().tableView.reloadData()
}
alert.addTextField { saveRunTextField in
saveRunTextField.placeholder = "Name your run"
textField = saveRunTextField
}
alert.addAction(action)
present(alert,animated: true,completion: nil)
}
}
在第二个 VC 中:
var runArray = ["BMW M3 Run 1","BMW M3 Run 2","Renault Megane RS"]
//MARK: TableView DataSource:
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return runArray.count
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "RunCell",for: indexPath)
cell.textLabel?.text = runArray[indexPath.row]
return cell
}
}
请记住,我是初学者,可以使用一些帮助,因为我的想法似乎都不起作用。
解决方法
每次调用 RunHistoryTableViewController()
时,都是在实例化一个新的 VC。如果您一次只显示一个 VC,则可以使用 prepareForSegue
方法在一个 VC 之间传递数据,并在该方法的目标参数中获取目标 VC 的实际实例。
代码 RunHistoryTableViewController()
调用视图控制器的初始化程序。它创建了一个全新的视图控制器实例,与任何其他实例无关。
此代码:
RunHistoryTableViewController().runArray.append(textField.text!)
创建 RunHistoryTableViewController,and appends textField.text to its
runArray,and then on the next line,that new instance of
RunHistoryTableViewControllergets thrown away. Same issue with the next line. You create a new
RunHistoryTableViewController` 的新实例,尝试引用它的表视图并告诉它重新加载。我希望那条线会崩溃,因为新实例的表视图将不存在。
您需要一种方法来指向您将要在屏幕上显示(或已经显示)的另一个视图控制器。
你如何在视图控制器之间导航?这将决定您如何在它们之间传递数据。
,我认为您有两种方法可以实现这一目标:
1- 使用协议并在此协议中传递数据
2- 使用 segue 并在此 segue 中传递数据
在这种情况下,最推荐的解决方案是使用协议来获得结果并具有良好的性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。