打开 TableView 到最后点击的单元格
Posted
技术标签:
【中文标题】打开 TableView 到最后点击的单元格【英文标题】:Open TableView To Last Clicked Cell 【发布时间】: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 就像一个魅力。你摇滚
【参考方案1】:
您的问题是您实际上是在将 forward 移动到视图控制器的新实例,而不是 back 到现有实例。如果您向后移动,则视图控制器的状态将与您离开时一样,并且无需对 tableview 执行任何操作。
您应该使用unwind segue 向后移动
【讨论】:
【参考方案2】:当您的单元格响应您的触摸时(并且您在选择单元格后没有调用 deselectRow(at indexPath: IndexPath)
),tableView 将保留您的选择,因此当您返回 viewController 时,只需在您的 @ 中调用 tableView.indexPathForSelectedRow(or tableView.indexPathsForSelectedRows)
987654323@方法。
【讨论】:
感谢您的回复,我正在处理这个问题。让我回复你,我会告诉你进展如何/如果我有后续问题 Meonadro,@Paulw11 提到我应该看看最终为我工作的放松 segues,干杯以上是关于打开 TableView 到最后点击的单元格的主要内容,如果未能解决你的问题,请参考以下文章
尝试快速从数组中删除时,不应删除 tableview 单元格中的最后一个单元格
如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图