2012-12-06 16 views
5

Changed olayından bir IBAction'a bağlanan bir çift UISwitch'im var. SwitchChanged olayı, tuşlara dokunulduğunda para cezası veriyor. Ancak, anahtarlardan birini program aracılığıyla değiştirirseniz, IBActionmı çağırmaz.UISwitch, Programlı Olarak Değiştirildiğinde valueChanged Olayı Göndermiyor

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

cevap

7

Bu, doğru ve istenen bir davranıştır. Değeri açıkça değiştirdiğinizden, değiştirilen değerin nasıl ele alınacağına karar vermek size kalmıştır. Bunun nedeni, kullanıcının etkileşimiyle değiştirilmekte olan değerinin bildirilmesinin ardından denetimin değerini açık bir şekilde değiştirmenin nadir olmadığı için olmasıdır. Eğer açık durum değişikliği olayın tekrar ateşlenmesine sebep olsaydı, sonsuz bir döngü içinde olursun.