当用户使用 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
方法中(当用户按下单元格时)。
然后在viewWillAppear
或viewDidAppear
方法中(在您的表视图所在的视图控制器中)只需调用
tableView.scrollToRow(at: selectedIndexPath, at: .top, animated: true)
然后它将您的表格视图滚动到先前选择的单元格。
【讨论】:
【参考方案2】:您在 viewWillAppear 或 viewDidAppear 中调用了任何 webservice 调用或 reloadData,只需从中删除该 webservicecall/reloadData viewWillAppear 或 viewDidAppear 会自动在表格视图中显示最后选择的单元格。
或替代方式
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 的后退按钮滚动到最后选定的行时的主要内容,如果未能解决你的问题,请参考以下文章