【问题标题】:NSTableView with +/- buttons like in System Preferences using only Interface Builder带有 +/- 按钮的 NSTableView,例如仅使用 Interface Builder 的系统偏好设置
【发布时间】:2014-03-23 02:25:32
【问题描述】:

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

如何在不操作代码中的任何界面元素或子类化任何元素类的情况下,直接在 Interface Builder 中的表格下方放置相同的按钮?

【问题讨论】:

标签: macos cocoa interface-builder


【解决方案1】:

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

将其样式更改为Small Square,将模式更改为Select None,并将段数增加到4(如果您只需要+-,则将其保留在3):

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

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

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

切换到大小设置并取消选中所有段的Fixed复选框,除了最后一个,确保最后一个被选中:

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

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

几乎完美,你不觉得吗?

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

将段数减一,将最后一段替换为不带标题的渐变按钮(NSButton):

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

在正确放置按钮并调整大小后,结果看起来和以前一样好,但这次表格可以调整大小,底部的按钮将始终完美契合。

【讨论】:

  • 不错的答案。我确实遇到了同样的问题并将我的答案发布到这个线程:stackoverflow.com/a/29208790/784318
  • 在一个标记为与此重复的问题 (stackoverflow.com/questions/29803307/…) 中,提出了几个关于使用右侧空白渐变按钮的问题:您不希望它是可选的通过全键盘导航,您不希望它显示为辅助功能的按钮。您可以通过检查拒绝第一响应者来解决第一个问题。第二个需要子类化纽扣电池。
猜你喜欢
  • 2021-05-28
  • 2011-10-02
  • 2016-06-02
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多