NSTableView的。如何覆盖自动滚动行为?

时间:2010-01-11 12:30:45

标签: objective-c cocoa nsoutlineview

我有一个NSTableView,它显示(通过绑定)来自NSTreeController的数据。应用程序经常将数据附加/更改到绑定数组中。

问题在于,如果用户在表中选择了一行,但已滚动以使所选数据不再可见,则当应用程序更新阵列时,会导致显示自动滚动以便选定的行再一次在屏幕上。这很漂亮 令用户感到沮丧,特别是因为新数据可以随时到达。

有没有办法禁用此功能?

2 个答案:

答案 0 :(得分:2)

您可能必须继承NSTableView并覆盖-scrollRowToVisible:,暂时将呼叫括在super。这可能还需要子类中的自定义BOOL ivar来跟踪是否要滚动。

我首先在那里设置一个断点,看看何时触发了自动滚动。这应该有助于找到切换伊娃的适当时机。

答案 1 :(得分:0)

您使用NSTreeController NSOutlineViewNSArrayController NSTableView?使用带有NSTreeController的{​​{1}}对我来说没有多大意义?

如果您使用的是NSTableView,则可能应该使用NSTableView来管理其数据,而这些行的重新排列是NSArrayController的一项功能。尝试在IB中关闭控制器上的自动重新排列内容选项。

当它打开时,数组控制器将在添加,删除和更改对象时重新排列其对象,这些对象会影响排序顺序(如果有)并导致任何表视图或大纲视图重新加载其数据。

我不知道NSArrayController的类似功能,主要是因为我不使用它,因为它对我来说从来没有用过。遗憾的是,我建议只使用NSTreeController的数据源方法,并以老式的方式提供数据。根据我的经验,NSOutlineView仅适用于最琐碎的任务。