【问题标题】:UISwitch Bool Fails? Switch isOn not TrueUISwitch Bool 失败?开关 isOn 不是 True
【发布时间】:2023-04-01 15:05:02
【问题描述】:

所以我有一个奇怪的。

我目前在 App Store 中有一个清单应用程序。今天,一位用户在使用UISwitch 时报告了奇怪的行为。

如下所示,这是Storyboard 中的一个简单开关,与 IBAction 相关联,就像我自 iOS 8 以来一直做的那样。

您检查切换到on,它会将图像更改为全 alpha 以表明您拥有它,否则图像将保持半透明和off

- (IBAction)Switch1:(id)sender {         //IBAction linked to Switch

     if([S001 isOn]) {                   //if Switch 'S001' is ON...
         myImage.alpha = 1.0;            //make image NOT transparent     

         ...
         //save ON                       //save data using NSUserDefaults
     }
     else {                              //else switch is OFF...
         myImage.alpha = 0.3;            //make image TRANSPARENT 

         ...
         //save OFF                      //save data using NSUserDefaults
     }
}

基本上,当用户按下开关时,它会动画并更改为ON,但看起来if([S001 isOn]) 从未被调用,因为if 内的任何内容都没有被调用。即图像不会更改为完整的 Alpha,并且没有任何内容保存为 ON。

用户使用的是运行 iOS 10.1.1 的 iPhone 6。现在奇怪的是,我在 iPhone 7+ 上运行 iOS 10.1.1 并且运行良好。它也适用于所有屏幕尺寸的 iOS 9。

我做了一些阅读,在 Stackoverflow 上找到了 THISTHIS,看起来其他人也遇到了类似的问题。

所以我猜如果人们在 iOS 9 中使用我的应用程序,然后升级到 iOS 10,那么他们就会遇到这个问题,但我不能确定。因为这似乎是一个独特的案例。

这可能是什么原因造成的?对于 iOS 10 用户,我可以做些什么来改进我的 IBAction?

【问题讨论】:

  • 为什么你的Switch1: 方法作用于S001 而不是sender
  • @rmaddy 你什么意思? Switch1IBActionS001。声明如下:IBOutlet UISwitch *S001-(IBAction)Switch1:(id)sender;
  • @rmaddy 我用错了 IBAction 吗?感谢您的帮助。
  • sender 参数将是UISwitch。最好对发件人采取行动,而不是对交换机的一些外部参考。
  • @rmaddy 哦,我明白了。你介意向我展示更有效的语法吗?我不熟悉这样做。我见过的所有教程都是这样实现的。谢谢。

标签: ios objective-c iphone uiswitch


【解决方案1】:
- (IBAction)Switch1:(UISwitch *)sender {         //IBAction linked to Switch

     if([sender isOn]) {                   //if Switch 'S001' is ON...
         myImage.alpha = 1.0;            //make image NOT transparent     

         ...
         //save ON                       //save data using NSUserDefaults
     }
     else {                              //else switch is OFF...
         myImage.alpha = 0.3;            //make image TRANSPARENT 

         ...
         //save OFF                      //save data using NSUserDefaults
     }
}

试试这个。这就是@rmaddy 引用发件人的意思。

为确保在切换开关时调用此方法,请务必在创建动作时指定“Value Changed”事件(通过右键单击-拖动开关到.m文件)

Dragging Switch from storyboard to .m

Possible Events

【讨论】:

  • 哦,我明白了。谢谢。
  • 哦,我想我使用touch up inside 甚至我的开关。我不知道应该使用“价值改变”。这就是为什么我可以拖动开关却什么都没有发生,或者点击它却发生了什么事?
  • 是的。当您在开关视图内部点击时,在触发器内部进行修饰,其中值更改对应于开关的值(开/关)
  • 我接受这个答案,因为它是为UISwitch 创建IBAction 的更有效方式。我的问题的解决方案是我需要将Sent Event 操作设置为Value Changed 而不是Touch Up Inside。这解决了我的问题:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多