【发布时间】: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