我正在尝试在我的应用程序中复制Mail.app行为。如果你有多个电子邮件帐户,并为每个帐户随机选择一封电子邮件,然后从侧边栏中在每个帐户之间切换,应用程序会记住你的滚动位置和你选择的电子邮件,并相应地显示它们。这就是我在应用程序中想要的。
我知道如何保留行选择,这很容易。tableView.selectedRowIndexes
我的tableView
有多个数据源,并相应地从侧边栏切换(tableView.reloadData()
(。
我的滚动位置有一个大问题。我试着研究NSScrollView
、NSClipView
和NSTableView
。在我看来,每个视图都有滚动机制。
- 当用户滚动每个数据源时,我需要记住滚动位置
- 当用户返回到数据源时,我需要加载上一个滚动位置
我注意到的另一个奇怪行为是,当将tableView
重新加载到不同的数据源时,它似乎一直记得以前的数据源滚动位置。这正常吗?我以为它会重置到顶部。
我的数据源是数组,它们是我的NSViewController
子类属性。
如果重要的话,我使用的是故事板,我的应用程序是针对大苏尔,我使用Swift。
要保存的位置:
preservedPosition = tableView.visibleRect.origin
恢复:
tableView.scroll(preservedPosition)