【问题标题】:Possible UISwitch bug in iOS7?iOS7中可能的UISwitch错误?
【发布时间】:2013-10-08 23:44:08
【问题描述】:

我正在使用 UISwitch 在我的应用程序中调用子视图来显示屏幕。但是,该开关仅在大约 60% 的时间内工作。为了测试我的代码,我将开关连接到另一个 IBAction 以将开关的状态写入控制台。这两个函数在某些时候都没有响应开关的状态,即,两个函数在某些时候同时忽略了开关的状态。有没有其他人在 iOS7 中使用 UISwitches 遇到过这种行为?

- (IBAction)showHideSomeSubView:(UISwitch *)sender {
if (_mySwitch.on) {
    [self.view addSubview:someSubView];
}
else {
    [someSubVew removeFromSuperview];
}}

编辑:

同一个开关连接到以下动作:

- (IBAction)switchToggled:(UISwitch *)sender {
sender = _mySwitch;
if ([sender isOn]) {
    NSLog(@"On");
} else {
    NSLog(@"Off");
}}

两个动作都以相同的方式响应开关。

【问题讨论】:

  • 你用什么事件来响应状态的变化?
  • 你能发布你的代码吗?
  • @Abizern:显示/隐藏子视图的 IBAction。
  • 什么 UIControl 方法正在调用它?
  • UIControl 子类(例如UISwitch)创建目标-动作连接时,它会根据设置的事件位掩码:UIControlEvents 调用动作。您将 IBAction 与哪些活动联系起来?

标签: ios ios7 uiswitch


【解决方案1】:

我向你确认这种奇怪的行为!!!! 只需左右拖动开关的小圆圈,您就会看到多次调用的动作(在我的情况下最多 403 :D ) 我真的不确定 Apple 工程师打算这样做,因为我还没有找到任何关于这种新行为的文档,顺便说一句,如果你找到了,也请告诉我。

非常感谢

【讨论】:

    【解决方案2】:

    我在 iOS 7 应用程序中使用了多个 UISwitches,我对 Value Changed 操作的响应完全没有问题。开关始终正确地报告其值。您应该从 IB 中的操作中解开开关,然后重新连接,确保您正在连接 Value Changed 操作。

    【讨论】:

      【解决方案3】:

      是的,在 iOS 7 iPad 模拟器中使用 UISwitch,我看到 1-12 次回调到我等效的 switchToggled: 方法。在最后一次回调中,值实际上已经改变。在之前的回调中,它没有。我正在做的是缓存开关是否打开。然后在 switchToggled: 方法中,我检查该值是否确实发生了变化。如果没有,我会忽略回调。这似乎使用户行为正确。

      该问题也确实发生在设备上,但显然不太常见。同样的解决方法似乎在那里工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 2014-03-07
        相关资源
        最近更新 更多