【发布时间】:2021-09-17 11:45:43
【问题描述】:
我搜索了这个问题的最佳解决方案,找到了一些线索,但并不完全满足 IMO。所以我在我的无代码解决方案下面发布。 目标是像在 Finder 或其他本机应用程序中一样,在表格或大纲的标题栏上有一个上下文菜单,允许选择哪些列是可见的。
【问题讨论】:
标签: nstableview appkit cocoa-bindings
我搜索了这个问题的最佳解决方案,找到了一些线索,但并不完全满足 IMO。所以我在我的无代码解决方案下面发布。 目标是像在 Finder 或其他本机应用程序中一样,在表格或大纲的标题栏上有一个上下文菜单,允许选择哪些列是可见的。
【问题讨论】:
标签: nstableview appkit cocoa-bindings
在 IB 故事板中,将您需要的所有列添加到表格视图中。 您可以将其中一些设置为默认隐藏。
按住 Ctrl 键将每一列从 IB 文档大纲视图拖到场景控制器代码视图,以便为每一列自动创建弱 IBOutlets。目的是能够针对绑定中的给定列。
__weak IBOutlet NSTableColumn *my_column;
向情节提要场景添加一个菜单,其项目数量与您计划隐藏的列的数量相同。您不必为菜单项指定标题(请参阅下一点)。
对于每个菜单项,在绑定窗格中,添加两个绑定:
title 项绑定到title 属性列:controller_name.my_column.title。这样,如果代码需要更改菜单项,菜单项将与列标题保持同步。value 绑定到hidden 列属性:controller_name.my_column.hidden。添加一个NSNegateBoolean 转换器以使菜单勾选变得有意义。将菜单附加到标题菜单:按住 ctrl 键单击表格标题视图并从菜单出口连接到在 #3 中创建的菜单。
原来如此。 #2 中添加的 IBOutlets 旁边没有代码。
绑定有两种方式,取消勾选菜单项将隐藏绑定列。此外,如果代码隐藏了列,则绑定的菜单项将反映其状态。
【讨论】: