如何通过无代码方案实现NSTableView/NSOutlineView表头右键菜单列隐藏功能?
NSTableView/NSOutlineView 表头列显隐上下文菜单无代码实现方案
我在Stack Overflow上搜索该问题的最优解决方案时,找到不少相关线索但个人认为均不够完善,因此在此分享无代码实现方案。该方案可以实现与Finder等原生应用完全一致的效果:在NSTableView或NSOutlineView的表头栏提供上下文菜单,支持用户自主选择需要显示的列。
实现目标
- 完全对齐macOS原生应用的表头列管理交互逻辑
- 右键点击表头即可唤起列管理菜单
- 支持用户勾选/取消勾选切换对应列的显隐状态
实现步骤(无需编写业务代码,仅需Interface Builder操作)
- 打开对应界面的xib或Storyboard文件,找到目标
NSTableView/NSOutlineView的NSTableHeaderView控件 - 从控件库拖拽一个
NSMenu实例到NSTableHeaderView上,系统会自动将该菜单关联为表头的右键上下文菜单 - 为每一个表格列在菜单中添加一个对应
NSMenuItem,按照如下规则绑定属性:- 选中菜单项,进入绑定设置面板,找到
value属性 - 将该属性绑定到对应
NSTableColumn实例的hidden属性 - 勾选绑定设置中的*反转值(NSNegateBoolean)*选项,保证菜单项勾选状态和列的显示状态对应
- 菜单项的标题设置为对应列的表头显示文本即可
- 选中菜单项,进入绑定设置面板,找到
- 如需设置默认显示的列,直接将对应
NSTableColumn的hidden属性设为NO即可,菜单项会自动同步为勾选状态
扩展说明
如果你的表格列是动态生成的,仅需在生成列的同时同步向上下文菜单中添加对应菜单项,沿用上述绑定逻辑即可,无需自定义表头点击监听逻辑,整体交互依然符合原生规范。
内容的提问来源于stack exchange,提问作者Max_B
相关产品推荐
相关产品推荐

