0

画面には6つのスイッチコントロールがあります。一度に1つのスイッチのみを有効にする必要があります.5番目のスイッチがオンの場合、1つのラベルと1つのテキストフィールドが表示されるか、非表示になります。

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];

}
4

2 に答える 2

2

スイッチがオンに切り替えられたときに、ラベルを非表示にします(.hidden = YES)。ただし、他のスイッチがオフになっている場合は、再表示(.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. 

}
于 2013-03-18T18:48:33.797 に答える
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];

}
于 2013-03-18T18:44:55.893 に答える