带有+/-按钮的NSTableView,如仅使用Interface Builder的系统偏好设置

时间:2014-03-23 02:25:33

标签: macos cocoa interface-builder

Apple通常在表格+下方放置- / NSTableView个按钮,例如在网络或用户的系统偏好设置&组。见下图:

Table Bottom - User & Groups System Prefs

如何在Interface Builder中直接在表格下面放置相同的按钮,而无需操作代码中的任何界面元素或继承任何元素类?

1 个答案:

答案 0 :(得分:33)

如果表格具有固定宽度,最简单的方法是使用分段控件NSSegmentedControl。首先将其添加到您的视图或窗口:

Segmented Control

将其样式更改为Small Square,将模式更改为Select None,并将细分数量增加到4(如果只需3,则将其保持在+ }和-):

Segmented Control Setup

+, - 和其他按钮是AppKit框架(NSAddTemplateNSRemoveTemplate)的预定义图像,可直接在Interface Builder中使用。例如。您可以按如下方式设置前三个部分:

Segment 0 Setup Segment 1 Setup Segment 2 Setup

出于演示目的,我禁用了-段。与大多数其他按钮不同,禁用分段控件的一段仅使图像/文本变暗,它不会更改按钮背景。仅禁用整个分段控件会更改背景(当然会禁用所有段)。

当然,应该始终禁用最后一个段,否则它会被点击并在单击时更改其背景。由于它不包含任何图像或文本,因此在禁用后仍然看起来相同。

切换到尺寸设置并取消选中所有线段的Fixed复选框,最后一个除外,确保检查最后一个:

Segment 0 Size Setup Segment 1 Size Setup Segment 2 Size Setup Segment 3 Size Setup

取消选中Fixed可使段宽动态,这意味着它将始终与内容所需的最小宽度相匹配。

最后将控件直接放在表格下方并调整大小以匹配表格宽度。结果如下:

The Result

几乎完美,你不觉得吗?

如果表格宽度是动态的,则事情会变得更加困难(例如,表格会随着窗口大小调整一起调整大小)。分段控件不支持自动调整,这意味着每次调整表格时都必须以编程方式更改其最后一个段的宽度。当然,这并不难做,只需要很少的代码,但有一种替代解决方案不需要单行代码。

将段数减少一个,并使用不带标题的渐变按钮(NSButton)替换最后一个段:

Gradient Button

它的背景看起来与分段控件完全相同,但它确实支持自动调整以始终匹配表的大小。只有一个问题:它是可点击的,这次禁用它不会起作用,因为这会改变背景。而只需将其类型更改为Momentary Change(这意味着应用程序希望在单击按钮时控制UI更改本身):

Gradient Button Setup

在正确放置按钮并使其可调整大小后,结果看起来和以前一样好,但这次桌子可以调整大小,底部的按钮总是很合适。

Sample Window Small Sample Window Bigger