以编程方式创建NSButtons

时间:2016-01-20 08:13:57

标签: objective-c macos cocoa nsbutton

我有一个大小不一的数组。我想为Mac OSX应用程序中的每个元素创建NSButtons。所以说这是数组:"thing1", "thing2", "thing3",然后我想在屏幕上分别标题为"button1", "button2", "button3"的三个按钮。

这显然需要以编程方式完成。我知道如何以编程方式创建按钮以及如何为他们提供固定的位置。

但这不是解决方案。如何使整个事物变得动态,这样无论创建多少个按钮,它都不会导致大量的UI问题? (所以基本上:例如,将所有按钮放在某个容器中的另一个按钮旁边)

谢谢。

4 个答案:

答案 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)];