我有一对通过valueChanged事件连接到IBAction的UISwitch。触摸开关时,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;
}
}
}
答案 0 :(得分:8)
这是正确且理想的行为。由于您明确更改了值,因此您可以决定如何处理更改后的值。
之所以这样,是因为在通过用户交互更改其值后,显式更改控件的值并不罕见。如果显式状态更改导致事件再次触发,则最终会处于无限循环中。