Привязка выбранного радиобокса к включению флажка в Какао - PullRequest
2 голосов
/ 19 февраля 2012

Раньше я много не работал с привязками Какао, поэтому мне нужна небольшая помощь.

У меня есть группа переключателей (NSMatrix) с тремя кнопками и одним флажком.Я хочу, чтобы этот флажок был включен, только когда выбран последний переключатель.

Нашел в Интернете учебное пособие, в котором рекомендуется привязать свойство выбранного тега группы переключателей к свойству enabled флажка.У последней кнопки радио должна быть метка 1, у других должна быть метка 0. Это прекрасно работает.

Проблема в том, что если флажок установлен и выбор радиокнопки изменен, он остается отмеченным, хотя и не включен.Я хотел бы, чтобы флажок был снят, когда он переходит в отключенное состояние.

Любой совет будет оценен!Заранее спасибо!

Есть ли способ добиться этого без кода?

1 Ответ

1 голос
/ 22 февраля 2012

Я сомневаюсь, что это можно сделать без кода.

Я справляюсь с этим в модели, используя КВО. Код выглядит примерно так:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([@"checkWithInProcess" isEqualToString:keyPath]) {

        NSNumber *oldValue = [change objectForKey:NSKeyValueChangeOldKey];
        NSNumber *newValue = [change objectForKey:NSKeyValueChangeNewKey];

        BOOL oldValueAsBool = (oldValue != (id)[NSNull null]) && oldValue.boolValue;
        BOOL newValueAsBool = (newValue != (id)[NSNull null]) && newValue.boolValue;

        if (oldValueAsBool && !newValueAsBool) {
            // Save the value
            savedRecordValueWithInProcess = self.recordValueWithInProcess;
            self.recordValueWithInProcess = nil;
        } else if (!oldValueAsBool && newValueAsBool) {
            // Restore the value or set it to the default
            if (savedRecordValueWithInProcess)
                self.recordValueWithInProcess = savedRecordValueWithInProcess;
            else
                self.recordValueWithInProcess = [NSNumber numberWithBool:NO];
            savedRecordValueWithInProcess = nil;
        }
    }
}

А при инициализации:

[self addObserver:self
       forKeyPath:@"checkWithInProcess"
          options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
          context:[Characteristic class]];
...