Search code examples
iosxcodeuibuttonnsuserdefaultsuiswitch

How to show/hide button with switch that saves value in NSUserDefaults


I have UISwitch named sosSwitch thas saves value in NSUserDefaults key: MySwitch and I have UIButton named sosBtn. How can I show/hide sosBtn depending on the switch value that was saved in NSUserDefaults? And where I need to put the code? In viewDidLoad? Thank you!


Solution

  • Assuming that you already have:

    @property (retain, nonatomic) IBOutlet UIButton *sosBtn;
    @property (retain, nonatomic) IBOutlet UISwitch *sosSwich;
    - (IBAction)sosSwitch:(id)sender;
    

    Try this:

    -(void)viewDidLoad
    {    
        if ([[NSUserDefaults standardUserDefaults] boolForKey:@"MySwitch"])
        {
            self.sosBtn.hidden = NO;
            [self.sosSwich setOn:YES animated:YES]; 
        }
        else 
        {
            self.sosBtn.hidden = YES;
            [self.sosSwich setOn:NO animated:YES];
        }
    }
    
    - (IBAction)sosSwitch:(id)sender 
    {
        UISwitch *mySosSwitch = (UISwitch *)sender;
        if (mySosSwitch.on)
        {
            self.sosBtn.hidden = NO;
            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"MySwitch"];  //YES means sosBtn should be visible
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
        else 
        {
            self.sosBtn.hidden = YES;
            [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"MySwitch"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }