当用户使用 UITableView 的后退按钮滚动到最后选定的行时

Posted

技术标签:

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

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

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

如何做到这一点?

【问题讨论】:

我认为你在 viewWillAppear 基金中调用了tableView reloadData,所以每次你从其他 ViewController 回来时它总是重新加载你的 tableView。 【参考方案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 以滚动到用户最后选择的行。

【讨论】:

以上是关于当用户使用 UITableView 的后退按钮滚动到最后选定的行时的主要内容,如果未能解决你的问题,请参考以下文章

单击后退按钮但不离开页面时防止自动滚动?

在 tableview 滚动时拦截 UITableView 中的 TouchUpInside 事件

导航“后退”按钮暂停,以便在弹出之前做一个快速动画

当用户按下后退按钮时隐藏导航抽屉

从滚动视图打开子视图

iOS UITableView如何禁用滚动到底部弹跳