10

我有一对通过 valueChanged 事件连接到 IBAction 的 UISwitches。触摸开关时 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;
        }
    }
}
4

1 回答 1

14

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

这样做的原因是,在通过用户交互通知控件的值被更改后,显式更改控件的值并不少见。如果显式状态更改导致事件再次触发,您将陷入无限循环。

于 2012-12-06T22:31:08.757 回答