2016-01-20 51 views
0

我有一个大小不同的数组。我想为Mac OSX应用程序中的每个元素创建NSButtons。所以说这是数组:"thing1", "thing2", "thing3",那么我需要在屏幕上分别命名为"button1", "button2", "button3"的三个按钮。安排以编程方式创建NSButtons

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

但这不能解决问题。我将如何使整个事情变得动态,这样无论将要创建多少个按钮,它都不会导致大量的用户界面问题? (所以基本上:将某个容器内的所有按钮放在另一个容器内)

谢谢。

回答

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... 
} 
0

我认为你需要使用水平NSStackView这一点。每个项目将是一个自定义NSView(创建自定义笔尖),其按钮和元素作为其子视图。为了在项目中正确排列控件,使用AutoLayout。

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