我有一个大小不一的数组。我想为Mac OSX应用程序中的每个元素创建NSButtons。所以说这是数组:"thing1", "thing2", "thing3"
,然后我想在屏幕上分别标题为"button1", "button2", "button3"
的三个按钮。
这显然需要以编程方式完成。我做知道如何以编程方式创建按钮以及如何为他们提供固定的位置。
但这不是解决方案。如何使整个事物变得动态,这样无论创建多少个按钮,它都不会导致大量的UI问题? (所以基本上:例如,将所有按钮放在某个容器中的另一个按钮旁边)
谢谢。
答案 0 :(得分:0)
您可以通过以下方式编程创建按钮:
NSButton *myButton = [[[NSButton alloc] initWithFrame:NSMakeRect(x, y, width, height)] autorelease];
[[windowOutlet contentView] addSubview: myButton];
[myButton setTitle: @"Button title!"];
[myButton setButtonType:NSMomentaryLightButton]; //Set what type button You want
[myButton setBezelStyle:NSRoundedBezelStyle]; //Set what style You want
[myButton setTarget:self];
[myButton setAction:@selector(buttonPressed)];
}
-(void)buttonPressed {
NSLog(@"Button pressed!");
//Do what You want here...
}
答案 1 :(得分:0)
我认为您需要使用水平NSStackView。每个项目都是自定义NSView(创建自定义笔尖),按钮和元素作为其子视图。要在项目内正确排列控件,请使用AutoLayout。
答案 2 :(得分:0)
要动态放置视图,您应该使用约束。这样,您可以在视图之间设置关系,而不是将它们放在固定位置。在这里查看文档: https://developer.apple.com/library/prerelease/mac/documentation/AppKit/Reference/NSLayoutConstraint_Class/
答案 3 :(得分:0)
有几种可能的方法。
1) NSStackView
一个新的类(出现在10.9中),它处理子视图的水平或垂直堆叠。
2)约束
约束允许您定义视图'彼此之间存在空间关系,但它们最容易在Interface Builder中管理,并且以编程方式工作可能有点复杂。
3)在代码中设置每个按钮的框架 通过相当简单的循环,您可以按照自己喜欢的方式定位按钮。这是最多"手册"这三种方法中,但也可以说是最明确和可预测的。这是一个定位按钮的方法示例。
- (void)arrangeViews:(NSArray <NSView *> *)views startingAt:(NSPoint)startPt spacing:(NSSize)spacing
{
NSPoint loc = startPt;
for (NSView *view in views) {
NSRect viewFrame = view.frame;
viewFrame.origin = loc;
view.frame = viewFrame;
loc.x += spacing.width;
loc.y += spacing.height;
}
}
如果你想垂直排列3个按钮,每个按钮相隔50个像素,那么你就像这样调用方法:
[self arrangeViews:@[btn0, btn1, btn2] startingAt:NSMakePoint(100,100) spacing:NSMakeSize(0,-50)];