UISwitch不发送ValueChanged事件当程序改变(UISwitch Doesn'

2019-07-04 17:05发布

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

Answer 1:

这是正确和期望的行为。 既然你明确改变的值,它是由你来决定如何处理变化值。

这样做的原因是因为它的情况并不少见被通知其价值正在通过用户交互更改后明确地改变控件的值。 如果明确的状态变化导致事件再次触发,你会在一个无限循环结束。



文章来源: UISwitch Doesn't Send valueChanged Event When Changed Programmatically