【问题标题】:UISwitch always returns "False" value even when Switch is on即使 Switch 开启,UISwitch 也总是返回“False”值
【发布时间】:2016-03-23 19:54:14
【问题描述】:

每次我在模拟器中将 UISwitch 切换为打开或关闭时,即使其中一个开关打开,它仍然返回 false。我什至尝试添加

self.switch1.on = true;

在 checkSwitch1Changed 的​​ if 语句中。

这是我在 .m 文件中的代码。

- (IBAction)checkSwitch1Changed:(id)sender {

    if (self.switch1.on)
    {
        self.switch2.on = NO;
        self.switch3.on = NO;
        self.switch4.on = NO;
    }
    ...
}


- (IBAction)checkSwitch2Changed:(id)sender {

    if (self.switch2.on) 
    {
        self.switch1.on = NO; 
        self.switch3.on = NO; 
        self.switch4.on = NO;
    }
    ...
}
- (IBAction)checkSwitch3Changed:(id)sender {

    if (self.switch3.on)
    {
        self.switch1.on = NO;
        self.switch2.on = NO;
        self.switch4.on = NO;
    }
    ...
}


- (IBAction)checkSwitch4Changed:(id)sender {

    if (self.switch4.on) 
    {
        self.switch1.on = NO;
        self.switch2.on = NO;
        self.switch3.on = NO;
    }
    ...
}

这是我在 .h 中的代码

@property (weak, nonatomic) IBOutlet UISwitch *switch1;
@property (weak, nonatomic) IBOutlet UISwitch *switch2;
- (IBAction)checkSwitch1Changed:(id)sender;
- (IBAction)checkSwitch2Changed:(id)sender;
//********

@property (weak, nonatomic) IBOutlet UISwitch *switch3;
@property (weak, nonatomic) IBOutlet UISwitch *switch4;
- (IBAction)checkSwitch3Changed:(id)sender;
- (IBAction)checkSwitch4Changed:(id)sender;

如果我使用该视图控制器发送数据,这实际上有效并返回 true。但我试图从另一个视图控制器访问这些数据,它发回错误。我使用此代码从其他视图控制器访问数据。

//import data from SetupController'
SetupController *setupController = [[SetupController alloc]     initWithNibName:@"SetupController" bundle:nil];
...
    Firebase *postRef = [savedRef childByAppendingPath: @"Switches"];
NSDictionary *post1 = @{
@"Check1": @(setupController.self.switch1.on),

【问题讨论】:

  • 你确定self.switch1 不是nil
  • 如何检查?我将交换机连接到数据库,每次我在我的 firebase 数据库中请求交换机状态时,它总是返回 false。 @rmaddy
  • 当一个开关打开时,您的所有 IBAction 都会被调用吗?您将其命名为 checkSwitch1Changed,因此当您打开 switch2 并关闭 switch1 时,使用该命名方案,应该调用 checkSwitch1Changed、checkSwitch3Changed 等......对吗?
  • 不,他们都是独立的。我刚刚更新了代码以进一步澄清它。 @MSU_Bulldog
  • 您是否尝试过通过调用 setOn:animated 来打开/关闭它? developer.apple.com/library/ios/documentation/UIKit/Reference/…: isOn 是一个自定义设置器属性,您需要调用它来设置开关的打开或关闭

标签: ios objective-c uiswitch


【解决方案1】:

您是否尝试检查isOn 属性,而不是on

if (self.switch1.on)

变成

if (self.switch1.isOn)

还要检查与开关关联的 IBAction 是否为

ValueChanged

事件,并且参考网点已正确链接。

【讨论】:

  • 我做到了,即使开关打开,它仍然返回 false
  • 我已将 Value Changed 链接到情节提要上的每个 IBAction。我确实看到了你的编辑,但我以前也有过这样的,但它仍然没有用。如果有意义的话,我只需要 UISwitch 在我拨动开关时返回“真”。
  • 如果您可以查看,我在帖子底部添加了另一个编辑。
  • @CarlosAlan 我阅读了编辑,我认为问题在于视图控制器刚刚被实例化。你应该检查你的设计。
【解决方案2】:

您还需要将开关“设置”为打开,而不是监听以查看它是否打开(如果有意义,则无需先设置)。

我确信有一种更优雅的方式来做到这一点(这里有点啰嗦),但是你应该明白这个想法,如果你把 ALL 开关挂起来,这个方法应该可以工作到 one IBAction 并将方法上的 senderid 更改为 UISwitch

(当然你不需要只使用 一个 IBAction,尽管这样做更有意义,而不是 4 个动作都想做同样的事情)

- (IBAction)switchPressed:(UISwitch *)sender {

       if (sender==self.switch1) {
           self.switch1.on = YES;
           self.switch2.on = NO;
           self.switch3.on = NO;
           self.switch4.on = NO;
       }
    if (sender==self.switch2) {
            self.switch1.on = NO;
            self.switch2.on = YES;
            self.switch3.on = NO;
            self.switch4.on = NO;
        }
    if (sender==self.switch3) {
            self.switch1.on = NO;
            self.switch2.on = NO;
            self.switch3.on = YES;
            self.switch4.on = NO;
        }
    if (sender==self.switch4) {
             self.switch1.on = NO;
             self.switch2.on = NO;
             self.switch3.on = NO;
             self.switch4.on = YES;
         }

}

【讨论】:

  • 我尝试了这个并将它们全部链接到一个 IBAction,这是一个好主意,但是当我询问 self.switch1.on 的值或当我实际拥有它们时,它仍然返回为 false在模拟器中开启。
  • @CarlosAlan,刚刚意识到我的代码在这里错了,错过了开关名称后面的 .on 。我会更新答案
  • 如果我使用该视图控制器发送数据,这实际上可以工作并返回 true。但我试图从另一个视图控制器访问这些数据,它发回错误。我使用此代码从另一个视图控制器访问数据。 //从SetupController'导入数据 SetupController *setupController = [[SetupController alloc] initWithNibName:@"SetupController" bundle:nil];
猜你喜欢
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2012-09-04
相关资源
最近更新 更多