【问题标题】:NSButton Toggle Button change programmaticallyNSButton 切换按钮以编程方式更改
【发布时间】:2014-04-16 19:15:57
【问题描述】:

我在我的应用程序中将 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];
}

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

【问题讨论】:

  • 我猜这就像iOS,你想要的是setOn/setOff。所以,如果你setEnabled,你只会设置用户是否可以与按钮交互。而setState 将允许你做你想做的事:开/关。
  • 我也试过[setAlternateImage:(img)]; setState:NSOnState];,结果还是一样。
  • 对于已经迁移到 Swift 的用户,toggleButton.state = myBoolValue ? NSOnState : NSOffState

标签: objective-c cocoa nsbutton


【解决方案1】:

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

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

[toggleButton setState:NSOnState];  
[toggleButton setState:NSOffState];

如果您希望在状态更改时采取适当的操作,您还必须调用适当的函数

[toggleButton setState:NSOnState];
[self startFunction:toggleButton];

或者,您可以调用

[toggleButton performClick:self];

但是,这会导致按钮在切换状态时出现短暂的水蓝色阴影(就像您实际点击它一样)。鉴于此,我更喜欢前一种方法。

所有这些都是根据我不久前在尝试做同样的事情时所做的一些快速观察得出的(谷歌搜索将我带到了这个线程)。希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多