2012-12-06 23 views
5

私は、valueChangedイベントを介してIBActionに1組のUISwitchesを接続しています。 valueChangedイベントは、スイッチがタッチされたときに起動します。しかし、プログラムでスイッチの1つを変更すると、IBActionが呼び出されません。UISwitchがプログラムで変更されたときにvalueChangedイベントを送信しない

- (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; 
     } 
    } 
} 

答えて

7

これは正しく、望ましい動作です。明示的に値を変更したので、変更された値をどのように扱うかはあなた自身が決定します。

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

関連する問題