UISwitch总是返回" False"即使Switch处于打开状态也是如此

时间:2016-03-23 19:54:14

标签: ios objective-c uiswitch

每次我在模拟器中将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。但我试图从另一个视图控制器访问此数据,它发回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),

2 个答案:

答案 0 :(得分:0)

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

我确信有一个更优雅的方式来做这个(这是一个但很长时间在这里啰嗦),但你应该明白这个方法,如果你把全部挂起来,这个方法应该可行到一个 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;
         }

}

答案 1 :(得分:0)

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

if (self.switch1.on)

变为

if (self.switch1.isOn)

同时检查与交换机关联的IBAction是否为

ValueChanged

事件,并且参考插座已正确链接。