Swift 为每个数据源保留(和加载)表视图滚动位置

Swift 为每个数据源保留(和加载)表视图滚动位置,swift,cocoa,nstableview,appkit,nsscrollview,Swift,Cocoa,Nstableview,Appkit,Nsscrollview,我正在尝试在我的应用程序中复制Mail.app行为。如果您有多个电子邮件帐户,并为每个帐户选择一封随机电子邮件,然后从侧边栏在每个帐户之间切换,则应用程序会记住您的滚动位置以及您选择的电子邮件,并相应地显示它们。这就是我想在我的应用程序 我知道如何保存行选择,这很简单表格视图。选择的RowIndexes MytableView有多个数据源和开关(tableView.reloadData()) 我的滚动位置有一个大问题。我试着查看nscrollview,NSClipView和NSTableView

我正在尝试在我的应用程序中复制Mail.app行为。如果您有多个电子邮件帐户,并为每个帐户选择一封随机电子邮件,然后从侧边栏在每个帐户之间切换,则应用程序会记住您的滚动位置以及您选择的电子邮件,并相应地显示它们。这就是我想在我的应用程序

我知道如何保存行选择,这很简单<代码>表格视图。选择的RowIndexes

My
tableView
有多个数据源和开关(
tableView.reloadData()

我的滚动位置有一个大问题。我试着查看
nscrollview
NSClipView
NSTableView
。在我看来,每个视图都有滚动机制

  • 我需要记住用户滚动每个数据源时的滚动位置
  • 当用户返回数据源时,我需要加载上一个滚动位置
  • 我注意到的另一个奇怪的行为是,当将
    tableView
    重新加载到不同的数据源时,它似乎始终记得以前的数据源滚动位置。这正常吗?我以为它会重置到顶部

    我的数据源是数组,它们是我的
    NSViewController
    子类属性

    如果重要的话,我使用的是故事板,我的应用程序针对的是Big Sur,我使用的是Swift。

    要保存的位置:

    preservedPosition = tableView.visibleRect.origin
    
    恢复:

    tableView.scroll(preservedPosition)
    

    reloadData()
    不会改变滚动的位置,这很正常。我忘记问我原来的问题了。如果用户不选择表格行,我如何保存滚动位置?@user10711707滚动位置与所选行无关。我将把您的答案标记为已解决,因为它确实为我提供了表格滚动位置。谢谢然而,我有一些奇怪的“错误”与此相关。我不知道是我的编程错误还是别的什么。关于这件事,我得另提一个问题。