setState不更新复选框的视图

时间:2012-04-04 16:07:04

标签: objective-c macos cocoa nsbutton

我正在尝试创建偏好设置窗口 在其中我有一些复选框样式NSButtons。问题是当我调用setState:方法时它们没有更新。我在初始化窗口时访问standarUserDefaults以获取它们应该处于的状态,并计划根据密钥的状态更改它们。

我知道他们实际上与IBOutlet和IBAction都有关系,因为我已经尝试过一些NSLog-ing来确保这一点。

我读过有关的一些信息以编程方式更改模型属性的值并未反映在用户界面中 here但我不确定这是问题还是坦率地说他们所指的是什么到那里。

我在.h文件中声明了这样的检查按钮:

IBOutlet NSButton *defaultDateCheck;
IBOutlet NSButton *closeOnCreationCheck;
IBOutlet NSButton *allowEmptyNumberCheck;
IBOutlet NSPopUpButton *defaultJobSetting;

init方法如下所示:

-(id)initWithWindowNibName:(NSString *)windowNibName{

    self = [super initWithWindowNibName:windowNibName];

    if (self) {

        NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];

        [defaultDateCheck setState:[myDefaults boolForKey:@"useDefaultDate"]];

        [closeOnCreationCheck setState:[myDefaults boolForKey:@"closeOnCreation"]];

        [allowEmptyNumberCheck setState:[myDefaults boolForKey:@"allowEmptyProjectNumber"]];

        [defaultJobSetting selectItemAtIndex:[myDefaults integerForKey:@"defaultJob"]];
    }
    return self;
}

我还尝试了以下格式来设置复选框但没有结果:

if ([myDefaults integerForKey:@"useDefaultDate"] == YES) {
    [defaultDateCheck setState:NSOnState];
}
else {
    [defaultDateCheck setState:NSOffState];
}

复选框的连接IBAction方法如下所示:

-(IBAction)toggleCloseOnCreation:(id)sender{
    [[NSUserDefaults standardUserDefaults] setBool:([closeOnCreationCheck state] == NSOnState) forKey:@"closeOnCreation"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

2 个答案:

答案 0 :(得分:3)

在-viewDidLoad方法中设置状态,因为在-init视图中它的子视图尚不存在

答案 1 :(得分:1)

设置默认值时使用:

[myDefaults setObject:[NSNumber numberWithBool:YES] forKey:@"YourKey"];

检查值是真还是假时,请使用:

[[[NSUserDefaults standardUserDefaults] objectForKey:@"YourKey"] boolValue]