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

发布于 2024-08-17 09:50:36 字数 212 浏览 9 评论 0原文

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

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

有什么办法可以禁用这个功能吗?

I've got an NSTableView that displays (via bindings) data from an NSTreeController. The application frequently appends/changes data to/in the bound array.

The problem is that if the user has selected a row in the table, but has scrolled so that the selected data is no longer visible, when the application updates the array it causes the display to auto-scroll so that the selected line is once again on screen. This is pretty
frustrating to users, especially since new data can arrive at any time.

Is there any way of disabling this feature?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清君侧 2024-08-24 09:50:36

您可能必须子类化 NSTableView 并重写 -scrollRowToVisible:,暂时将对 super 的调用括起来。这可能还需要在子类中使用自定义 BOOL ivar 来跟踪是否要滚动。

我首先在那里设置一个断点,以查看自动滚动何时被触发。这应该有助于找到切换 ivar 的合适时机。

You may have to subclass NSTableView and override -scrollRowToVisible:, temporarily bracketing the call to super. This may also require a custom BOOL ivar in your subclass to keep track of whether you want to scroll.

I would start by setting a breakpoint there to see when exactly the autoscroll is triggered. This should help to find the proper moments to toggle the ivar.

北笙凉宸 2024-08-24 09:50:36

您是否将 NSTreeControllerNSOutlineView 一起使用,还是将 NSArrayControllerNSTableView 一起使用?将 NSTreeControllerNSTableView 一起使用对我来说没有多大意义?

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

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

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

Are you using an NSTreeController with an NSOutlineView or an NSArrayController with an NSTableView? Using an NSTreeController with an NSTableView doesn't make a lot of sense to me?

If you're using an NSTableView you should probably be using an NSArrayController to manage its data and this rearranging of the rows is a feature of the NSArrayController. Try turning off the Auto Rearrange Content option on your controller within IB.

When it's on, the array controller will rearrange its objects on addition, removal and changes to objects that would affect the sort ordering (if any) and cause any table views or outline views to reload their data.

I don't know of a similar feature for NSTreeController mainly because I don't use it since it's never worked well for me. I, sadly, recommend to just use the datasource methods for the NSOutlineView and supply your data the old-fashioned way. In my experience, NSTreeController is only well suited for the most trivial tasks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文