如何检查在cocoa中以编程方式创建的NSCheckbox的状态

时间:2013-08-08 07:13:20

标签: objective-c macos cocoa

我创建了多个复选框动态,现在我想检查它们的状态,但我不知道该怎么做。这是我创建多个NSCheckbox的代码:

for(int i=1; i<=number;i++)
{
    DeleteCheckbox = [[NSButton alloc] initWithFrame:NSMakeRect (20,textfield_Y,50,25)];
    [DeleteCheckbox setButtonType:NSSwitchButton];
    [DeleteCheckbox setBezelStyle:0];
    [DeleteCheckbox setTitle:@""];
    [DeleteCheckbox setTag:200+i];
    [DeleteCheckbox setState:NSOffState];
    [DeleteCheckbox setAction:@selector(checkState:)];
    [guiView addSubview:DeleteCheckbox];
    [DeleteCheckbox release];
}

以下是检查状态的代码:

-(IBAction)checkState:(id)sender
{
    if ([DeleteCheckbox state] == NSOnState) {

        NSLog(@"selected");
    }
    else {

        NSLog(@"not selected");

    }
}

但是在运行时,它始终是printf:“未选中”。

3 个答案:

答案 0 :(得分:10)

您必须检查发送按钮的状态,而不是实例变量DeleteCheckbox(已发布且未指向有效按钮)的状态:

-(IBAction)checkState:(NSButton *)sender
{
    if ([sender state] == NSOnState) {
        NSLog(@"selected");
    }
    else {
        NSLog(@"not selected");
    }
}

答案 1 :(得分:0)

您在此处设置“关闭”状态:

[DeleteCheckbox setState:NSOffState];

尝试设置“开启”状态。

[DeleteCheckbox setState:NSOnState];

答案 2 :(得分:0)

您应该检查sender的状态,而不是DeleteCheckBox的状态,因为您似乎正在为要实例化的所有复选框重用该变量。

  if ([(NSButton*)sender state] == NSOnState)

等...