引用IBOutlet的数组(NSButton)

时间:2012-02-26 22:26:33

标签: objective-c cocoa interface-builder

我正在创建一个有32个Check Box和NSTextField的应用程序。 如果用户单击NSTextField,则按钮应采用描述此数字的二进制代表的值。 在NSTextField上接收“clicked”动作没问题,但是对于我声明了32个NSButtons数组的按钮:

#import <Foundation/Foundation.h>


@interface Handler : NSObject 
{
    @private
    IBOutlet NSTextField* textField;
    IBOutlet NSButton* bits[32];     // here are the buttons
}

- (void)awakeFromNib;
- (void) setTextField : (int) value;
- (int) getTextField;
@end

但是当我尝试将Check Box与IBOutlet“位”链接时,我无法为每个成员执行此操作。 所以我只能将32个指向NSButton的数组组成一个盒子。 我还展示了一张图片:

Interface builder

对我来说这是一个问题,我是否必须手动声明32个不同名称的32个不同的出口?

3 个答案:

答案 0 :(得分:3)

您不必使用32个不同的IBOutlet引用。您可以声明IBOutletCollection

@property (retain, nonatomic) IBOutletCollection(NSButton) NSArray *buttons;

使用此链接将它们全部链接起来。请记住,按钮的顺序在运行时是不确定的,这意味着,您无法保证在应用程序运行时按钮将按任何特定顺序排列。

答案 1 :(得分:1)

这可能是使用NSMatrix对象的一个​​很好的例子。

您可以在界面中添加一个按钮,然后使用在Xcode 4中选择的按钮转到编辑器&gt;嵌入&gt;矩阵。然后,您可以选择拖动按钮的一角,将其展开为矩阵。

NSMatrix允许您通过搜索给定标记或列/行坐标来检索单元格值。

如何: 1)嵌入NSButton对象:

Creating a button matrix

2)选项 - 拖动任何按钮角以展开矩阵:

enter image description here

答案 2 :(得分:0)

我把它扩展成一个矩阵。但是图形上它看起来像一个按钮 这就是我得到的:

enter image description here

enter image description here