【发布时间】:2017-06-15 23:32:04
【问题描述】:
我有一个带有可点击单元格的表格视图列表,当点击一个新的视图控制器时,会打开一个新的视图控制器。当单击后退按钮并调用第一个 VC 时,tableview 重置到列表的顶部。我怎样才能改变这个,所以当点击后退按钮时,表格视图会回到点击的原始单元格?据我了解,我需要一个 tableview.scrollToRow,但我在需要选择的 indexPath 中有点迷失(相信我需要保存最后选择的行,但现在确定如何执行此操作)
代码如下:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let webVC = UIStoryboard.init(name: "MainVC", bundle: nil).instantiateViewController(withIdentifier: "SecondaryVC") as! WebViewController
webVC.urlLink = self.listings?[indexPath.row].url
self.present(webVC, animated: true, completion: nil) }
override func viewWillAppear(_ animated: Bool) {
tableview.scrollToRow(at: indexPathSelected, at: .middle, animated: false)
}
【问题讨论】:
-
您确定要返回视图控制器的原始实例吗?如果你是,那么你不需要做任何事情;视图应该与您移动到新视图控制器之前的状态相同。你能说明你是如何“返回”的吗?
-
我认为这可能是问题所在。在 viewDidLoad 中,我正在运行一个为 tableView 提取 json 数据的函数,最后我有 DispatchQueue.main.async { self.tableview.reloadData()}。也许每次调用VC时,数据都在重新加载并且tableview正在重置到顶部?我在 main.storyboard 中设置了后退按钮,我在其中右键单击拖动并将第一个 VC 设置为“显示”。
-
我怀疑您正在推送视图控制器的新实例,而不是“返回”。搜索有关 unwind segues 的信息并使用一个。您还应该使用 segue 来呈现 MainVc,而不是直接调用
present -
太棒了,会检查一下,谢谢你的提示!
-
Unwind segue 就像一个魅力。你摇滚
标签: ios swift tableview didselectrowatindexpath