【问题标题】:Open TableView To Last Clicked Cell打开 TableView 到最后点击的单元格
【发布时间】: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


【解决方案1】:

您的问题是您实际上是在将 forward 移动到视图控制器的新实例,而不是 back 到现有实例。如果您向后移动,则视图控制器的状态将与您离开时一样,并且无需对 tableview 执行任何操作。

您应该使用unwind segue 向后移动

【讨论】:

    【解决方案2】:

    当您的单元格响应您的触摸时(并且您在选择单元格后没有调用 deselectRow(at indexPath: IndexPath)),tableView 将保留您的选择,因此当您返回 viewController 时,只需在您的 @ 中调用 tableView.indexPathForSelectedRow(or tableView.indexPathsForSelectedRows) 987654323@方法。

    【讨论】:

    • 感谢您的回复,我正在处理这个问题。让我回复你,我会告诉你进展如何/如果我有后续问题
    • Meonadro,@Paulw11 提到我应该看看最终为我工作的放松 segues,干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多