2012-12-06 6 views
5

Ich habe ein Paar UISwitches über das valueChanged-Ereignis an eine IBAction angeschlossen. Das valueChanged-Ereignis wird ausgelöst, wenn die Schalter berührt werden. Wenn ich jedoch einen der Schalter programmgesteuert ändere, ruft er nicht meine IBAction auf.UISwitch sendet kein valueChanged-Ereignis, wenn programmgesteuert geändert

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

Antwort

7

Dies ist korrektes und gewünschtes Verhalten. Da Sie den Wert explizit geändert haben, müssen Sie entscheiden, wie mit dem geänderten Wert verfahren wird.

Der Grund dafür ist, dass es nicht ungewöhnlich ist, den Wert des Steuerelements explizit zu ändern, nachdem der Wert des Elements durch Benutzerinteraktion geändert wurde. Wenn die explizite Statusänderung das Ereignis erneut ausgelöst hat, würden Sie in einer Endlosschleife enden.