2012-12-06 9 views
5

Ho un paio di UISwitch collegati a un IBAction tramite l'evento valueChanged. L'evento valueChanged sta funzionando correttamente quando gli switch vengono toccati. Tuttavia, se cambio uno degli interruttori a livello di programmazione, non chiama la mia IBAction.UISwitch non invia l'evento valueChanged se modificato a livello di programmazione

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

risposta

7

Questo è il comportamento corretto e desiderato. Poiché hai esplicitamente modificato il valore, spetta a te decidere come gestire il valore modificato.

La ragione di ciò è perché non è raro modificare esplicitamente il valore del controllo dopo essere stato informato del suo valore modificato tramite l'interazione dell'utente. Se il cambiamento di stato esplicito ha causato nuovamente l'attivazione dell'evento, si finirebbe in un ciclo infinito.

Problemi correlati