【发布时间】:2017-12-26 06:14:18
【问题描述】:
我花了一整天的时间试图弄清楚这一点,想了解一下这里发生了什么:
我有一个自定义的UITableViewController,它嵌入在navigation controller 中,它有一个按钮可以触发到普通UIViewController 的转场。
普通的UIViewController 有一个展开到TableViewController 的按钮,以及一个感谢navigation controller 免费提供的“返回”按钮。
现在的问题是:当我从TableViewController 转到UIViewController 时,一切正常。从UIViewController 开始,如果我按下“后退”按钮,它会倒回并自动重新加载TableView。但是,当我按下链接到@IBAction 的按钮展开时,它会展开到TableViewController,但什么也没有出现,甚至没有一张空桌子。
我的调试视图显示,一旦我尝试使用按钮(不是“返回”)放松,TableViewController 又回到屏幕上,但它的框架非常小,里面什么都没有,所以navigation controller 的黑色背景正在显示,因此表格应该是黑屏。
谁能告诉我如何在我放松时手动重新初始化tableView 或重置TableViewController?我在viewDidAppear() 中尝试了tableView.reload() 并没有发生任何事情,因为我怀疑问题是TableViewController 本身没有像segueing 之前那样的原始帧。
Link to screenshots with descriptions
TableViewController 代码:
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
}
【问题讨论】:
标签: swift uitableview uiviewcontroller uinavigationcontroller uistoryboardsegue