【问题标题】:NSTableView (or NSOutlineView) column hiding through contextual menu : a "no code" solution通过上下文菜单隐藏 NSTableView(或 NSOutlineView)列:“无代码”解决方案
【发布时间】:2021-09-17 11:45:43
【问题描述】:

我搜索了这个问题的最佳解决方案,找到了一些线索,但并不完全满足 IMO。所以我在我的无代码解决方案下面发布。 目标是像在 Finder 或其他本机应用程序中一样,在表格或大纲的标题栏上有一个上下文菜单,允许选择哪些列是可见的。

【问题讨论】:

    标签: nstableview appkit cocoa-bindings


    【解决方案1】:
    1. 在 IB 故事板中,将您需要的所有列添加到表格视图中。 您可以将其中一些设置为默认隐藏。

    2. 按住 Ctrl 键将每一列从 IB 文档大纲视图拖到场景控制器代码视图,以便为每一列自动创建弱 IBOutlets。目的是能够针对绑定中的给定列。

      __weak IBOutlet NSTableColumn *my_column;
      
    3. 向情节提要场景添加一个菜单,其项目数量与您计划隐藏的列的数量相同。您不必为菜单项指定标题(请参阅下一点)。

    4. 对于每个菜单项,在绑定窗格中,添加两个绑定:

      • 通过控制器出口将title 项绑定到title 属性列:controller_name.my_column.title。这样,如果代码需要更改菜单项,菜单项将与列标题保持同步。
      • 这是关键:将菜单项的value 绑定到hidden 列属性:controller_name.my_column.hidden。添加一个NSNegateBoolean 转换器以使菜单勾选变得有意义。
    5. 将菜单附加到标题菜单:按住 ctrl 键单击表格标题视图并从菜单出口连接到在 #3 中创建的菜单。

    原来如此。 #2 中添加的 IBOutlets 旁边没有代码。

    绑定有两种方式,取消勾选菜单项将隐藏绑定列。此外,如果代码隐藏了列,则绑定的菜单项将反映其状态。

    【讨论】:

    • 建议:将此答案添加到NSTableView to allow user to choose which columns to display 并删除此问题。
    • 我刚刚在该线程中添加了一个链接到这个。我选择不在那里发布这个答案,因为它是一个旧答案,有一个带有一定代码量的可接受答案,而这个答案专注于“无代码”。
    • 你使用的技术更老了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多