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

标签 objective-c cocoa 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];
}

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

最佳答案

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

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

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

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

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

或者,您可以调用

[toggleButton performClick:self];

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

所有这一切都只是我不久前在尝试做同样的事情时所做的一些快速观察(谷歌搜索让我找到了这个线程)。希望这有帮助:)

关于objective-c - NSButton 切换按钮以编程方式更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23118233/

相关文章:

objective-c - 当 UISearchDisplayController 的 searchResultsTable 不显示结果时,我可以更改 UITableViewCell 的外观吗

objective-c - Cocoa 应用程序处理标准 HTTP url 方案

objective-c - 带动画顺时针旋转 NSButton

objective-c - 改变披露三角形的方向

objective-c - 在 View 之间翻转有 UITableView 位置问题

objective-c - iOS 10.3.3 UIButton _intrinsicSizeWithinSize/_updateTitleView CoreFoundation 崩溃

ios - 响应式 3D Touch

cocoa - 如何创建带有圆角的 NSImageView?

转义反斜杠时 Swift 中的正则表达式不起作用

objective-c - setState 不更新复选框的 View