【问题标题】:When user uses back button to UITableView to scroll to last selected row当用户使用 UITableView 的后退按钮滚动到最后选定的行时
【发布时间】:2016-12-05 08:42:40
【问题描述】:

我有一个大约 200 行的 tableView。当用户选择一行来查看详细信息并稍后点击返回按钮时,tableView 总是返回到表格的顶部。

我想设置 tableView 以强制 tableView 自动滚动到用户最后选择的行。

如何做到这一点?

【问题讨论】:

  • 我认为你在 viewWillAppear 基金中调用了tableView reloadData,所以每次你从其他 ViewController 回来时它总是重新加载你的 tableView。

标签: ios swift uitableview swift3


【解决方案1】:

我建议将选定的NSIndexPath 存储在didSelectRowAtIndexPath 方法中(当用户按下单元格时)。 然后在viewWillAppearviewDidAppear 方法中(在您的表视图所在的视图控制器中)只需调用

tableView.scrollToRow(at: selectedIndexPath, at: .top, animated: true)

然后它将您的表格视图滚动到先前选择的单元格。

【讨论】:

    【解决方案2】:

    您在 viewWillAppearviewDidAppear 中调用了任何 webservice 调用或 reloadData,只需从中删除该 webservicecall/reloadData viewWillAppearviewDidAppear 会自动在表格视图中显示最后选择的单元格。

    或替代方式

    savedScrollPosition 表示将您选择的索引保存在 didselectRow 上

    yourTableView.scrollToRow(at: IndexPath(row: savedScrollPosition, section: 0), atScrollPosition: .top, animated: false)
    var point = yourTableView.contentOffset
    point.y -= yourTableView.rowHeight
    yourTableView.contentOffset = point
    

    【讨论】:

    • 谢谢。我尝试了您的代码,并希望 y 坐标将在相同的确切位置对齐,但相反,它会转到帧的顶部,行高较少。找不到获得精确 y 坐标的方法。
    【解决方案3】:

    在 NSUserDefaults 中保存最后选择的行并使用 UITableView "scrollToRowAtIndexPath" 如下:

    目标-C:

    [self.tableView scrollToRowAtIndexPath:lastSelectedIndex atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
    

    斯威夫特:

    self.tableView.scrollToRowAtIndexPath(lastSelectedIndex, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
    

    在 UITableView 重新加载后使用。

    【讨论】:

      【解决方案4】:

      我认为您应该找出导致表格滚动到顶部的原因。您还可以保存选定的 indexPath 以滚动到用户最后选择的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-06
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        相关资源
        最近更新 更多