NSButton Toggle Button изменить программно

У меня есть 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 get хранятся в NSUserDefaults (что отлично работает); Я хочу запомнить последнее состояние кнопки, когда пользователь повторно открывает приложение.


person ctfd    schedule 16.04.2014    source источник
comment
Я думаю, это похоже на iOS, и вам нужно установить On/setOff. Таким образом, если вы setEnabled, вы установите только то, может ли пользователь взаимодействовать с кнопкой. Тогда как setState позволит вам делать то, что вы хотите: вкл/выкл.   -  person Larme    schedule 17.04.2014
comment
Я также пробовал [setAlternateImage:(img)]; setState:NSOnState]; и все тот же результат.   -  person ctfd    schedule 17.04.2014
comment
Для тех, кто перешел на Swift, toggleButton.state = myBoolValue ? NSOnState : NSOffState   -  person l --marc l    schedule 06.10.2016


Ответы (1)


setEnabled: только изменяет доступность кнопки для взаимодействия с пользователем

Следующее будет переключать изображение кнопки вместе с настройкой состояния кнопки на вкл / выкл.

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

Если вы хотите, чтобы вместе с изменением состояния выполнялись соответствующие действия, вам также придется вызывать соответствующие функции.

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

Кроме того, вы можете позвонить

[toggleButton performClick:self];

Тем не менее, это вызовет кратковременное голубое затенение кнопки (как будто вы на самом деле нажимаете на нее), когда она переключает состояние. Я предпочитаю первый метод из-за этого.

Все это просто сделано из некоторых быстрых наблюдений, которые я сделал некоторое время назад, пытаясь сделать то же самое (погугление привело меня к этой теме). Надеюсь это поможет :)

person georgemp    schedule 08.06.2014