【发布时间】:2019-04-18 19:58:31
【问题描述】:
我正在尝试将数据从 UIViewController 推送到 UITableView。现在我可以将一条数据推送到单元格,它看起来很好。如果我返回并推送更多数据,我遇到的问题只是覆盖了单元格。而不是去另一个牢房。我已经尝试了这个post 的建议
和self.tableView.reloadData()。这似乎并没有解决我遇到的问题。下面是我写的代码。
class PredictorTableViewController: UITableViewController {
var predictorTrack = ""
var firstDriver = ""
var secondDriver = ""
var thirdDriver = ""
var grandPrix = [GrandPrix]()
override func viewDidLoad() {
super.viewDidLoad()
self.grandPrix.append(GrandPrix(granPrix: predictorTrack, firstDriver: firstDriver, secondDriver: secondDriver, thirdDriver: thirdDriver))
self.tableView.reloadData()
self.navigationItem.title = "Predictor"
let backbutton = UIButton(type: .custom)
backbutton.setTitle(" Back", for: .normal)
backbutton.setTitleColor(.blue, for: .normal)
backbutton.addTarget(self, action: #selector(self.backbuttonpressed), for: .touchUpInside)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backbutton)
setupNavBar()
}
@objc func backbuttonpressed() {
dismiss(animated: true, completion: nil)
}
func setupNavBar(){
navigationController?.navigationBar.prefersLargeTitles = true
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return grandPrix.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! GrandPrixTableViewCell
let race = self.grandPrix[indexPath.row]
// Configure the cell...
cell.grandPrix.text = race.grandPrix
cell.firstPostion.text = race.firstDriver
cell.secondPosition.text = race.secondDriver
cell.thirdPostion.text = race.thirdDriver
return cell
}
下面是准备segue的函数。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "getPredictor" {
let predictorVC = segue.destination as! UINavigationController
let vc = predictorVC.topViewController as! PredictorTableViewController
vc.predictorTrack = TrackTextField.text!
vc.firstDriver = firstTextField.text!
vc.secondDriver = secondTextField.text!
vc.thirdDriver = thirdTextField.text!
}
}
【问题讨论】:
-
您是否尝试将 didSet 设置为您在 stackoverflow 问题链接中提到的 grandPrix 变量?试试这个 var grandPrix = [GrandPrix]() { didSet {self.tableView.reloadData()} }。你说你回去,你回去哪里?你解雇了 ViewController 吗?那么您的数据模型可能只有一个元素。需要更多关于 GrandPrix 以及如何填充 [GrandPrix]() 数组的说明。
-
我已经尝试过 Imrul 并且它仍然会覆盖单元格。所以只显示一条数据。
-
你回去的时候检查过,[GrandPrix]()数组有多少元素?
-
它只是显示以下
[Racing_Weather.GrandPrix] [Racing_Weather.GrandPrix] [Racing_Weather.GrandPrix] -
也许你的数组没有存储以前的数据,当你关闭 VC 时,你的数组变为空。当您关闭 PredictorTableViewController 时,在调试部分使用 po 命令查看 var grandPrix 是否为空。
标签: ios arrays swift tableview