Objective-c(Mac)可防止窗口再次打开

时间:2014-04-30 17:22:09

标签: objective-c xcode ibaction nsbutton

我使用共享用户默认值记录复选框操作(如果已标记或未标记)。如果选中该复选框,我试图让该复选框设置一个窗口关闭。如果没有,则出现窗口。

尝试使用if和else语句为NSButton设置IBAction,但它失败了。有关如何做到这一点的任何想法或想法?

1 个答案:

答案 0 :(得分:0)

在应显示或隐藏的窗口的nib文件中,窗口属性的复选框为“#34;在启动时可见”#34;。默认情况下,我认为设置了标志,这将自动导致在加载nib文件时显示窗口。

如果您想要选择是否应该在启动时显示该窗口,则应取消选中"在启动时可见"复选框,以便您可以选择在闲暇时显示它。

我要做的是以下内容。假设tourWindow是巡视窗口的IBOutlet,请取消选中"在发布时可见"该窗口的属性。我假设如果shouldRunCl为真,那么应该显示窗口?您的复选框有措辞"阻止再次打开",因此您应该使用values.shouldRunCl值变换器将复选框的值绑定到NSNegateBoolean。然后,在您的控制器类中,执行以下操作:

@implementation MDAppController

+ (void)initialize {
    NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
    [defaults setObject:@(YES) forKey:@"shouldRunCl"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
    [[NSUserDefaultsController sharedUserDefaultsController]
                                     setInitialValues:defaults];
}


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    if ([[[NSUserDefaults standardUserDefaults]
                    objectForKey:@"shouldRunCl"] boolValue]) {
        [self.tourWindow makeKeyAndOrderFront:nil];
    }
}

@end

+initialize代码中的第一行设置NSUserDefaults的默认值和NSUserDefaultsController的初始值。这意味着在以后的代码中,当您调用[[NSUserDefaults standardUserDefaults] objectForKey:@"shouldRunCl"]时,您始终可以依赖于存在的值。请注意,此处将其设置为yes仅设置默认值,它不会阻止用户在单击复选框时更改该值(因此名称"用户默认")。

虽然我选择applicationDidFinishLaunching:来实现显示窗口的代码,但您也可以输入awakeFromNib或willFinishLaunching。代码会检查是否shouldRunCl == YES,如果是,则会显示tourWindow

不应该为复选框设置IBAction;当用户点击它时,它将更改(覆盖)shouldRunCl的默认值,并在下次启动时保留。