Apple 通常将 +
/-
按钮放置在表格 (NSTableView
) 下方,例如在网络或用户和组的系统偏好设置中。见下图:
如何在 Interface Builder 中直接将相同的按钮放置在表格下方,而无需操作代码中的任何界面元素或对任何元素类进行子类化?
最佳答案
如果表格具有固定宽度,最简单的方法是使用分段控件NSSegmentedControl
。首先将其添加到您的 View 或窗口中:
将其样式更改为小方 block
,将模式更改为无选择
并将段数增加到4
(或保持在3
如果您只需要 +
和 -
):
+、- 和其他按钮是 AppKit 框架的预定义图像(NSAddTemplate
和 NSRemoveTemplate
),可直接在 Interface Builder 中使用。例如。您可以按如下方式设置前三个部分:
出于演示目的,我禁用了 -
段。与大多数其他按钮不同,禁用分段控件的一部分只会使图像/文本变暗,而不会更改按钮背景。仅禁用整个分段控件会更改背景(当然也会禁用所有分段)。
当然,最后一段应该始终被禁用,否则它将是可点击的,并且在点击时会改变其背景。由于它不包含图像或文本,因此禁用后它看起来仍然相同。
切换到尺寸设置并取消选中除最后一个片段之外的所有片段的Fixed
复选框,确保选中最后一个片段:
取消选中固定
会使段宽度动态化,这意味着它将始终匹配内容所需的最小宽度。
最后将控件直接放置在表格下方并调整其大小以匹配表格宽度。结果如下:
几乎完美,你不觉得吗?
如果表格宽度是动态的(例如表格大小与窗口大小一起调整),事情会变得更加困难。分段控件不支持自动调整大小,这意味着每次调整表大小时,您都必须以编程方式更改其最后一段的宽度。当然,这并不难做到,并且只需要很少的代码,但有一种替代解决方案不需要任何一行代码。
将段数减少 1,并用不带标题的渐变按钮(NSButton)替换最后一段:
它的背景看起来与分段控件完全相同,但它确实支持自动调整大小以始终匹配表格的大小。只有一个问题:它是可点击的,但这次禁用它不起作用,因为这会改变背景。相反,只需将其类型更改为Momentary Change
(这意味着应用程序希望在单击按钮时控制 UI 更改本身):
正确放置按钮并调整大小后,结果看起来和以前一样好,但这次表格可以调整大小,底部的按钮将始终完美适合。
关于macos - NSTableView 带有 +/- 按钮,就像在系统偏好设置中仅使用 Interface Builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22586313/