2013-03-18 87 views
0

屏幕上有6个开关控件。一次只能启用一个开关。如果第五个开关打开,那么应该可以看到一个标签和一个文本字段,或者应该隐藏它。开启/关闭UISwitch的问题

我面临的问题,当5开关从关闭改变,并再次改变为关闭。标签和文字应该隐藏,但不按照要求工作。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.sw_switch1.on = NO; 
    self.sw_switch2.on = NO; 
    self.sw_switch3.on = NO; 
    self.sw_switch4.on = NO; 
    self.sw_switch5.on = NO; 
    self.sw_switch6.on = NO; 

    lbl_desc.hidden = YES; 
    txt_desc.hidden = YES; 

} 


-(IBAction)switchChange:(id)sender 
{ 

     if(sw_switch1.isOn) 
     { 
      //self.sw_switch1.on = NO; 
      self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 

     } 


     else if(sw_switch2.isOn) 
     { 
      self.sw_switch1.on = NO; 
      //self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 

     } 


     else if(sw_switch3.isOn) 
     { 
      self.sw_switch1.on = NO; 
      self.sw_switch2.on = NO; 
      //self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 

     } 
     else if(sw_switch4.isOn) 
     { 
      self.sw_switch1.on = NO; 
      self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      //self.sw_switch4.on = NO; 
      self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 

     } 

     else if(sw_switch5.isOn) 
     { 
      self.sw_switch1.on = NO; 
      self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      //self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 
      lbl_desc.hidden = YES; 
      txt_desc.hidden = YES; 

     } 

     else if(sw_switch6.isOn) 
     { 
      lbl_desc.hidden = NO; 
      txt_desc.hidden = NO; 
      self.sw_switch1.on = NO; 
      self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      self.sw_switch5.on = NO; 
      //self.sw_switch6.on = NO; 
     } 


    [self viewWillAppear:NO]; 

} 

回答

1

你可以试试这个

if(sw_switch5.isOn) 
     { 
      self.sw_switch1.on = NO; 
      self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      //self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 
      lbl_desc.hidden = NO; 
      txt_desc.hidden = NO; 
     } 
     else 
     { 
      lbl_desc.hidden = YES; 
      txt_desc.hidden = YES; 
     } 

我的建议是你应该使用的标记值也为每一个开关控制。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    sw_switch1.tag = 101; 
    sw_switch2.tag = 102; 
    sw_switch3.tag = 103; 
    sw_switch4.tag = 104; 
    sw_switch5.tag = 105; 
    sw_switch6.tag = 106; 
    self.sw_switch1.on = NO; 
    self.sw_switch2.on = NO; 
    self.sw_switch3.on = NO; 
    self.sw_switch4.on = NO; 
    self.sw_switch5.on = NO; 
    self.sw_switch6.on = NO; 

    lbl_desc.hidden = YES; 
    txt_desc.hidden = YES; 

} 

编辑:使用这样if((theSwitch.tag == 105) && self.sw_switch5.on)标签值。 现在你可以在尝试下面的优化代码

-(IBAction)switchChange:(id)sender 
{ 
    UISwitch *theSwitch = (UISwitch *) sender; 
    BOOL switchState = theSwitch.on; //this method is called when changed to on or off. 

    self.sw_switch1.on = NO; // force all switches off 
    self.sw_switch2.on = NO; 
    self.sw_switch3.on = NO; 
    self.sw_switch4.on = NO; 
    self.sw_switch5.on = NO; 
    self.sw_switch6.on = NO; 

    lbl_desc.hidden = YES;// force the label and textfield should be hidden 
    txt_desc.hidden = YES; 

    theSwitch.on = switchState; // recover the state set by the user, so at a time only one switch should be on 

    //now hide or unhide the labels depending on the state of switch 5 only 

    if((theSwitch.tag == 105) && self.sw_switch5.on){ 
    lbl_desc.hidden = NO; 
    txt_desc.hidden = NO; 
    } 
    else{ 
     lbl_desc.hidden = YES; 
     txt_desc.hidden = YES; 
    } 

    [self.view setNeedsDisplay]; 

} 
+0

通过的时候'如果(sw_switch5.isOn)是他的代码内达到',开关5被关闭,无论如何,除非它碰巧是switch6那是之前。虽然你建议使用标签是很好的。您将展示如何设置它们,但是您不会在动作方法中使用它们。 – 2013-03-18 19:01:45

+0

谢谢托尼蓝,这是一个完美的代码,它按照我的要求工作。 – dacsian 2013-03-20 04:21:25

2

你隐藏标签(.hidden = YES)时,则切换到swithed上。但是当其他人关闭时,您不会取消隐藏(.hidden = NO)。反正你的代码有点不合逻辑。

我建议:

-(IBAction)switchChange:(id)sender 
{ 

      UISwitch *theSwitch = (UISwitch *) sender; 
      BOOL switchState = theSwitch.on; //this method is called when changed to on or off. 

      self.sw_switch1.on = NO; // force all switches off 
      self.sw_switch2.on = NO; 
      self.sw_switch3.on = NO; 
      self.sw_switch4.on = NO; 
      self.sw_switch5.on = NO; 
      self.sw_switch6.on = NO; 

      theSwitch.on = switchState; // recover the state set by the user. 

      //now hide or unhide the labels depending on the state of switch 5. 
      lbl_desc.hidden = self.sw_switch5.on; 
      txt_desc.hidden = self.sw_switch5.on; 

    // [self viewWillAppear:NO]; // What the h.... is this? You are not supposed to call that method. Use self.view.setNeedsDisplay or so instead. 

    [self.view setNeedsDisplay]; // This may not be reqired but it forces the view to re-display itself. 

}