Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 带有+;/-仅使用界面生成器的系统首选项中的按钮_Macos_Cocoa_Interface Builder - Fatal编程技术网

Macos 带有+;/-仅使用界面生成器的系统首选项中的按钮

Macos 带有+;/-仅使用界面生成器的系统首选项中的按钮,macos,cocoa,interface-builder,Macos,Cocoa,Interface Builder,苹果公司通常将+/-按钮放在表格下方(NSTableView),例如网络或用户组的系统首选项中。见下图: 如何在Interface Builder中直接将相同的按钮放置在表格下方,而无需操作代码中的任何界面元素或对任何元素类进行子类化?如果表格具有固定宽度,最简单的方法是只使用分段控件NSSegmentedControl。首先将其添加到视图或窗口: 将其样式更改为Small Square,将模式更改为选择None,并将段数增加到4(如果只需要+和-,则将其保持在3): +、-和其他按钮是A

苹果公司通常将
+
/
-
按钮放在表格下方(
NSTableView
),例如网络或用户组的系统首选项中。见下图:


如何在Interface Builder中直接将相同的按钮放置在表格下方,而无需操作代码中的任何界面元素或对任何元素类进行子类化?

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

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

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

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

当然,最后一个片段应该始终被禁用,否则它将是可单击的,并在被单击时更改其背景。由于它不包含任何图像或文本,因此在禁用后,它的外观仍然相同

切换到尺寸设置,取消选中除最后一段以外的所有段的
固定
复选框,确保选中最后一段:

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

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

几乎完美,你不觉得吗

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

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

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

在按钮被正确放置并可调整大小后,结果看起来和以前一样好,但这次桌子可以调整大小,底部的按钮将始终完美匹配


回答得好。我确实遇到了同样的问题,并发布了对此线程的答案:。在一个被标记为此()副本的问题中,提出了几个关于使用右侧空白渐变按钮的问题:您不希望它通过完整的键盘导航进行选择,也不希望它显示为可访问性按钮。您可以通过检查第一响应者来解决第一个问题。第二个需要对按钮单元格进行子类化