【问题标题】:UISwitch value change event is not triggered iOSiOS 未触发 UISwitch 值更改事件
【发布时间】:2015-10-13 05:44:34
【问题描述】:

我正在以编程方式在滚动视图中添加 UISwitch。

UIVIew -> UIScrollView -> UISwitch

UISwitch *toggleSwitch = [[UISwitch alloc] initWithFrame: CGRectZero];
[toggleSwitch addTarget:self action:@selector(flipMode:) forControlEvents:UIControlEventValueChanged];
toggleSwitch.on = YES;
toggleSwitch.userInteractionEnabled = YES;
[scrollView addSubview: toggleSwitch];

动作方法:

- (IBAction)flipMode:(id)sender{    
    if([sender isOn])
    {
       // On Toggle ON
    } else {
     //On Toggle OFF
    }
}

当我们多次切换开关或在某个时间点将开关从 ON 状态缓慢拖动或移动到 OFF 状态或反之亦然时,该操作不会被调用。在下一刻值更改时,它将触发事件。

在 15-20 次试验中有 2 次出现此问题。无法找到它的根本原因。

帮助赞赏

【问题讨论】:

  • 你在执行[switchName setOn:YES animated:YES];
  • 是的,默认值就在那里..
  • 粘贴'flipMode'方法的代码
  • 尝试在方法返回类型中使用void 而不是IBAction
  • 发生率为 15 次中有 2 次。发生是工作还是不工作?

标签: ios objective-c uiscrollview uiswitch


【解决方案1】:

将滚动视图的 delaysContentTouches 属性设置为 NO

yourScrollView.delaysContentTouches = NO;

这将导致您的开关立即“获得”触摸,而不是 比让他们先去 UIScrollView 。 检查this答案。

您的flipMethod: 应类似于以下代码

-(void)flipMode:(id)sender
{
 if([sender isOn])
   [toggleSwitch setOn:YES animated:YES];
 else
   [toggleSwitch setOn:NO animated:YES];
}

【讨论】:

  • 我进行了更改,但仍然出现同样的问题。
  • 滚动视图中的UISwitch可能会出现问题
  • 我想出了一个解决方法,在缓慢拖动开关时,动作被多次调用。提到了这个stackoverflow.com/questions/19628310/…
猜你喜欢
  • 2015-08-18
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 2013-05-26
  • 2021-08-24
  • 2021-09-30
  • 2014-01-03
相关资源
最近更新 更多