我有一个 NSTableView,它显示(通过绑定)来自 NSTreeController 的数据。应用程序经常将数据附加/更改到绑定数组中。
问题是,如果用户在表格中选择了一行,但滚动后选择的数据不再可见,当应用程序更新数组时,它会导致显示自动滚动,以便再次显示选定的行在屏幕上。这对用户来说非常令人沮丧,特别是因为新数据可以随时到达。
有没有办法禁用这个功能?
我有一个 NSTableView,它显示(通过绑定)来自 NSTreeController 的数据。应用程序经常将数据附加/更改到绑定数组中。
问题是,如果用户在表格中选择了一行,但滚动后选择的数据不再可见,当应用程序更新数组时,它会导致显示自动滚动,以便再次显示选定的行在屏幕上。这对用户来说非常令人沮丧,特别是因为新数据可以随时到达。
有没有办法禁用这个功能?
您可能必须继承NSTableView
和覆盖-scrollRowToVisible:
,暂时将调用括起来super
。这可能还需要在您的子类中使用自定义 BOOL ivar 来跟踪您是否要滚动。
我会先在那里设置一个断点,看看何时触发了自动滚动。这应该有助于找到切换 ivar 的合适时机。
您使用的是NSTreeController
with anNSOutlineView
还是 an NSArrayController
with an NSTableView
?NSTreeController
与 an 一起使用NSTableView
对我来说没有多大意义?
如果您使用的是 an ,NSTableView
您可能应该使用 anNSArrayController
来管理其数据,并且这种重新排列行是NSArrayController
. 尝试在 IB 中关闭控制器上的自动重新排列内容选项。
当它打开时,数组控制器将在添加、删除和更改对象时重新排列其对象,这些对象会影响排序顺序(如果有)并导致任何表视图或大纲视图重新加载其数据。
我不知道类似的功能NSTreeController
主要是因为我不使用它,因为它对我来说从来都不是很好用。遗憾的是,我建议只使用数据源方法,NSOutlineView
并以老式方式提供数据。以我的经验,NSTreeController
它只适合最琐碎的任务。