UISwitch 重复触发action方法

UISwitch

理论上,只用当用户点击了UISwitch,才会触发,vauleChange 的action方法
但是实际开发中,发现iOS10机型上,如果在action方法里调用了-setOn:animated:或者setOn: ,就会多触发一次action方法。

解决方案

  1. 避免在valueChange方法里调用-setOn:animated:setOn:
  2. 如果无法避免,使用dispatch_async,在主队列执行这些方法(这个方法有个缺点,比较卡的手机会看到闪动的现象)
- (IBAction)valueChanged:(id)sender {
    ...
    dispatch_async(dispatch_get_main_queue(), ^{
       [sender setOn:YES];
    });
    ...
}

3.iOS 10 以下机型不会出现这个问题,iOS11 待验证

参考

UISwitch setOn(:, animated:) does not work as document

你可能感兴趣的:(UISwitch 重复触发action方法)