UISwitch 始终 returns "False" 值,即使在 Switch 打开时也是如此

UISwitch always returns "False" value even when Switch is on

每次我在模拟器中打开或关闭 UISwitch 时,即使其中一个开关打开,它仍然 returns 错误。我什至尝试添加

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。但我试图从另一个视图控制器访问此数据,它发回 false。我使用这段代码从另一个视图控制器访问数据。

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

您还需要 'set' 将开关打开,而不是 监听 以查看它是否打开(无需先设置,如果有意义的话)。

我敢肯定有更优雅的方法来做到这一点(这里有点冗长),但你应该明白这个想法,如果你挂钩 ALL[=27,这个方法应该会起作用=] 切换到 one IBAction 并将方法上的 senderid 更改为 UISwitch.

(当然你不需要只使用 one 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;
         }

}

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

if (self.switch1.on)

变成

if (self.switch1.isOn)

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

ValueChanged

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