打开 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 单元格中的最后一个单元格

如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图

tableView:cellForRowAtIndexPath:不仅为可见单元格调用吗?

Swift:如何在 tableView 中模糊点击单元格

点击/ reloadData不更改单元格时TableView单元格消失?