我花了一整天的时间想弄清楚这件事,想了解一下这里发生了什么:
我有一个嵌入在UITableViewController
中的自定义navigation controller
,它有一个按钮,可以触发一个普通UIViewController
的segue。
普通的UIViewController
有一个展开到TableViewController
的按钮,还有一个“后退”按钮,由于navigation controller
而免费提供。
现在的问题是:当我从TableViewController
转到UIViewController
时,一切都正常。从UIViewController
开始,如果我按下“后退”按钮,它将返回并自动重新加载TableView
。但是,当我按下链接到@IBAction
的按钮来展开时,它会展开到TableViewController
但没有显示任何内容,甚至没有空表。
我的调试视图显示,一旦我尝试使用按钮(而不是“back”)展开,TableViewController
返回到屏幕上,但它的帧非常小,并且没有任何内容,因此显示的是navigation controller
的黑色背景,因此只是一个黑色屏幕,表应该在那里。
有人能告诉我如何在我放松时手动重新初始化tableView
或重置TableViewController
?我尝试了tableView.reload()
中的viewDidAppear()
,但什么也没有发生,因为我怀疑问题是TableViewController
本身没有像segue之前那样的原始帧。
Link to screenshots with descriptions
表视图控制器代码:
class StatsTableViewController: UITableViewController {
//variable stuff
@IBAction func unwindToRoot(_ sender: UIStoryboardSegue) {
}
override func viewDidLoad() {
super.viewDidLoad()
self.getData()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DispatchQueue.main.async {
self.tableView.reloadData()
}
self.getData()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return solves.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! StatsTableViewCell
cell.timeLabel?.text = solves[indexPath.row].0
cell.scrambleLabel?.text = solves[indexPath.row].1
return cell
}
//other stuff
}
最佳答案
设置委托数据源方法
//在viewDidLoad()中添加这两行
override func viewDidLoad() {
super.viewDidLoad()
self.getData()
//Add this line
self.UITableViewName.delegate = self
self.UITableViewName.dataSource = self
}
关于swift - 展开后,TableView消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47974582/