NSButton切换按钮以编程方式更改

ctf*_*tfd 2 cocoa objective-c nsbutton

我在我的应用程序中将NSButton设置为切换(开/关).当我单击按钮它工作正常,但当我尝试以编程方式使用[toggleButton setEnabled:YES];它时它没有任何效果.

码:

- (void)awakeFromNib {

    defaults = [NSUserDefaults standardUserDefaults];
    NSString *toggleValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"toggleActive"];

    if (toggleValue == nil) toggleValue = @"YES";

    if ([toggleValue isEqualToString:@"YES"]) {
        [defaults setObject:@"YES" forKey:@"toggleActive"];
        isOn = YES;
        [toggleButton setEnabled:YES];
    }

    if ([toggleValue isEqualToString:@"NO"]) {
        [defaults setObject:@"NO" forKey:@"toggleActive"];
        isOn = NO;
        [toggleButton setEnabled:NO];   
    }

    [[NSUserDefaults standardUserDefaults] synchronize];
} 

- (IBAction)toggleButton:(id)sender {

   if( isOn ) {
       [self stopFunction: (NSButton *)sender];
       isOn = NO;
       [defaults setObject:@"NO" forKey:@"toggleActive"];

       } else {
       [self startFunction (NSButton *)sender];
       isOn = YES;
       [defaults setObject:@"YES" forKey:@"toggleActive"];
       }

      [[NSUserDefaults standardUserDefaults] synchronize];
}
Run Code Online (Sandbox Code Playgroud)

*toggleActive是或否获取存储在NSUserDefaults中(工作正常); 我想要记住用户重新打开应用程序时的最后一个按钮状态.

geo*_*emp 6

setEnabled:仅将按钮的可用性更改为用户交互

以下将切换按钮的图像,同时将按钮的状态设置为开/关

[toggleButton setState:NSOnState];  
[toggleButton setState:NSOffState];
Run Code Online (Sandbox Code Playgroud)

如果您希望采取适当的操作以及状态更改,则还必须调用相应的函数

[toggleButton setState:NSOnState];
[self startFunction:toggleButton];
Run Code Online (Sandbox Code Playgroud)

或者,你可以打电话

[toggleButton performClick:self];
Run Code Online (Sandbox Code Playgroud)

但是,当它切换状态时,这将导致按钮的简短浅蓝色阴影(就像您实际上是在点击它一样).由于这个原因,我更喜欢前一种方法.

所有这些只是我刚才做的一些快速观察,同时试图做同样的事情(谷歌搜索带我到这个线程).希望这可以帮助 :)