如何以编程方式创建NSButton?

时间:2011-10-21 07:01:53

标签: nsbutton

通过编程方式创建多个NSButton后,如何将其恢复并在视图中删除?

这是创建NSButton

的方法
- (void)createButton:(NSString *)buttonName 
           title:(NSString *)buttonTitle
               x:(int)xValue
               y:(int)yValue
           width:(int)widthValue
          height:(int)heightValue 
        filePath:(NSString *)filePathValue 
    fileTypeCode:(enum FILE_TYPE)fileTypeValue 
        duration:(int)durationValue 
 indexOnTimeline:(int)index
{

NSButton *btn = [[NSButton alloc] initWithFrame:
                  NSMakeRect(xValue,yValue,widthValue,heightValue)];
[[_window contentView] addSubview: btn];

NSString *moreDesc = [NSString stringWithFormat:@"%@:%i:%i:%i", filePathValue, fileTypeValue, durationValue, index];
[btn setAlternateTitle:moreDesc];

[btn setTitle: buttonTitle];
[btn setTarget:self];
[btn setIdentifier:buttonName];
[btn setAction:@selector(renderMe:)];
[btn setButtonType:NSMomentaryLight];
[btn setBezelStyle:NSTexturedRoundedBezelStyle];
}

3 个答案:

答案 0 :(得分:1)

你可以做几件事

1。)更改方法签名以返回NSButton。在调用create按钮的方法中,您可以将所有按钮添加到NSMutableArray。在头文件中,定义一个新的强属性NSMutableArray * buttonArray。

- (void)callingMethod {
    self.buttonArray = [NSMutableArray array];
    [self.buttonArray addObject:[self createButton:***]]
}

- (NSButton*)createButton:(NSString *)buttonName 
           title:(NSString *)buttonTitle
               x:(int)xValue
               y:(int)yValue
           width:(int)widthValue
          height:(int)heightValue 
        filePath:(NSString *)filePathValue 
    fileTypeCode:(enum FILE_TYPE)fileTypeValue 
        duration:(int)durationValue 
 indexOnTimeline:(int)index
{

... Your code ....

return btn;
}

2.)或者,您可以通过调用

来访问您的视图所具有的所有子视图
  NSArray* subViews = [[_window contentView] subviews];
  foreach(NSView* view in subViews) {
      if([view isMemberOfClass:[NSButton class]]) {
          NSButton* button = (NSButton*) view; 
          // Figure out if the button is the one you want and do something to it
      }
  }

答案 1 :(得分:0)

我解决了这个问题,非常简单,我使用NSMutableArray存储我创建的所有按钮,然后您可以访问并对此数组中的任何按钮执行任何操作。

答案 2 :(得分:0)

您需要更改返回按钮实例的方法签名。您还需要删除要添加到上下文创建按钮的部分。

对于非ARC世界,您还需要自动释放返回的对象。

安德烈