10

valueChanged イベントを介して IBAction に接続された UISwitches のペアがあります。スイッチに触れると、valueChanged イベントが正常に発生します。ただし、スイッチの 1 つをプログラムで変更すると、IBAction が呼び出されません。

- (IBAction)switchChanged:(UISwitch *)sender {
    if (sender == self.shippingSwitch) {
        if (self.shippingSwitch.on && !self.PayPalSwitch.on) {
            [self.PayPalSwitch setOn:YES animated:YES];
        }
    }

    if (sender == self.PayPalSwitch) {
        if (!self.PayPalSwitch.on) {
            // This is not working when the PayPal switch is set via the code above
            self.PayPalEmailField.backgroundColor = [UIColor grayColor];
            self.PayPalEmailField.enabled = NO;

            if (self.shippingSwitch.on) {
                [self.shippingSwitch setOn:NO animated:YES];
            }
        } else {
            self.PayPalEmailField.backgroundColor = [UIColor clearColor];
            self.PayPalEmailField.enabled = YES;
        }
    }
}
4

1 に答える 1

14

これは正しく、望ましい動作です。値を明示的に変更したので、変更された値の処理方法を決定するのはあなた次第です。

これは、ユーザーの操作によって値が変更されたことが通知された後、コントロールの値を明示的に変更することは珍しくないためです。明示的な状態の変化によってイベントが再度発生した場合、無限ループに陥ります。

于 2012-12-06T22:31:08.757 に答える