UISwitch不发送valueChanged事件时编程更改

我有一对UISwitches通过valueChanged事件连接到一个IBAction。 当触摸开关时,valueChanged事件触发正常。 但是,如果我以编程方式更改其中一个开关,它不会调用我的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; } } } 

这是正确和理想的行为。 由于您明确更改了该值,因此决定如何处理更改的值由您决定。

原因是因为在通过用户交互通知其值被改变之后显式地改变控制的值并不less见。 如果明确的状态变化导致事件再次触发,那么最终会以无限循环结束。