一个box是一个简单的视图,它可以在给自身绘制边框并命名,它在视觉上将其他视图(包括控件)组合在一起。
设置Box的标题
可以使用无标题或者标题在以下六个位置的box,要设置标题的位置,使用setTitlePosition:
方法设置为以下选项中的任意一个,默认情况下,标题位置为NSAtTop
。
NSAboveTop![]() | NSAtTop ![]() | NSBelowTop![]() |
NSAboveBottom![]() | NSAtBottom ![]() | NSBelowBottom![]() |
NSNoTitle![]() |
要设置标题的字体,可以使用setTitleFont:
方法。默认情况下,它是Control Content字体,改字体允许在Preferences应用程序中的外观面板的Fonts选项卡中设置。需要注意,当标题出现在box内部时,修改字体大小会影响box内容窗口的大小。
要设置标题,使用setTitle:
。默认的是“Title”。若标题长度大于box的宽度,该标题将会被裁剪。
设置Box的边框样式
NSBox的外观样式需要结合使用setBoxType:
和setBorderType:
两个方法。NSBox实例的默认box 类型为NSBOXPrimary
,默认边框类型为NSGrooveBorder
。
图1示例调用setBorderType:
指定边框类型为NSNoBorder
。
图1 无边框的NSBox
图2示例调用setBorderType:
指定边框类型为NSBoxGrooveBorder
,调用setBoxType:
指定box类型为NSBoxPrimary
。
图2 primary样式的NSBox
图3示例调用setBorderType:
指定边框类型为NSBoxGrooveBorder
,调用setBoxType:
指定box类型为NSBoxSecondary
。
图3 secondary样式的NSBox
注意,边框出现在box内部,可能会减少内容矩形框中的可用空间。
设置Box的子视图
要添加一个子视图到box上,可以使用通用的子视图添加方法,例如addSubView:
和replaceSubview:with:
方法。那些NSView实际上被添加到NSBox的内容区域,该区域是在frame内部的一个NSView集合。NSView的子视图添加方法被NSBox重新定义,以确保子视图能够正确地放置在视图层级中。然而,需要注意的是subviews
方法没有被重新定义:它返回只包含NSBox的内容视图一个元素的数组。
NSBox的内容视图的大小和位置依赖于NSBox的边框类型、标题位置、绘制标题的字体大小和通过设置setContentViewMargin:
方法带来的额外尺寸。当NSBox被创建时,一个NSView的实例被同时创建并添加(作为NSBox对象的子视图)到NSBox上以填充其内容区域。如果你要用自己的NSView替换此内容视图,你的NSView将会被自动调整大小以适合内容区域。同样,当你调整NSBox的大小时它的内容视图将会自动调整并填充内容区域。
使用Box创建分隔符
一个NSBox实例可以用于在空间之间创建一个视觉分隔符。如图1所示。这是Cocoa等效的碳主题分隔符。
图1 垂直和水平分隔符
调用setBoxType:方法并指定box类型为NSBoxSeparator将会配置NSBox实例显示为一个分割器。
分隔符将以视图为中心绘制,并沿视图的最长轴方向绘制。如果NSBox的边界是相等的,那么分隔符将以水平方向绘制。
以下示例代码说明如何去创建一个视觉分隔符。
Listing1 创建视觉分隔符的示例代码
//创建水平方向分隔符
NSBox *horizontalSeparator = [[NSBox alloc] initWithFrame:NSMakeRect(15.0,250.0,250.0,1.0)];
[horizontalSeparator setBoxType:NSBoxSeparator];
//创建垂直方向分隔符
NSBox *verticalSeparator = [[NSBox alloc] initWithFrame:NSMakeRect(250.0,15.0,1.0,250.0)];
[verticalSeparator setBoxType:NSBoxSeparator];
//示例添加到当前窗口视图上,根据自身需要添加到对应视图
[self.window.contentView addSubview:horizontalSeparator];
[self.window.contentView addSubview:verticalSeparator];