UISwitch在以编程方式更改时不发送valueChanged事件

时间:2012-12-06 22:26:54

标签: objective-c ios uiswitch

我有一对通过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;
        }
    }
}

1 个答案:

答案 0 :(得分:8)

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

之所以这样,是因为在通过用户交互更改其值后,显式更改控件的值并不罕见。如果显式状态更改导致事件再次触发,则最终会处于无限循环中。