sandeep tomar
sandeep tomar

Reputation: 305

How to make image on unbutton persist until its not changed by the user .?

I am working on UIButton as a check box, when I press button than checkbox selected image is appear and when press again checkbox unselected image is appear. if I press button image is appear, but it again disappear when I come back to that view again.

- (void)viewDidLoad {
     [super viewDidLoad];

     _car.delegate = self;
     _car.keyboardType = UIKeyboardTypeNumberPad;


     [_PreCheck setBackgroundImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal];
     [_PreCheck setBackgroundImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateSelected];
     [_PreCheck addTarget:self action:@selector(checkboxSelected:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
}

-(void)checkboxSelected:(id)sender
{
    if ((checkBoxSelected = !checkBoxSelected)) {
        [_PreCheck setSelected:checkBoxSelected];
        NSLog(@"selected");
        NSString *selected = @"selected";
        NSUserDefaults *select = [NSUserDefaults standardUserDefaults];
        [select setObject:selected forKey:@"checkboxselected"];
        [select synchronize];
    }
    else
    {
        NSLog(@"not selected");
        [_PreCheck setSelected:notselected];
    }
}

Upvotes: 1

Views: 61

Answers (2)

rishi
rishi

Reputation: 11839

Store the button state in NSUSerDefaults.

Then In viewDidLoad get the state and based on that load image.

- (void)viewDidLoad
{
    // Your code

    // get selected state from user defaults.
     BOOL selected = [[NSUserDefaults standardUserDefaults] boolForKey:@"buttonstateKey"];
     if (selected)
     {
      // set selected image
     }
     else 
     {
     // set regular image
     }
}

Upvotes: 1

Nitin Gohel
Nitin Gohel

Reputation: 49730

Based on your posted code your ViewDidLoad must be check with current NSUserDefaults store value is selected or not based on it first you need to set button check uncheck image. so following is your viewDidLoad Code look like:

- (void)viewDidLoad {
    [super viewDidLoad];
    _car.delegate = self;
    _car.keyboardType = UIKeyboardTypeNumberPad;

     NSString *state = [[NSUserDefaults standardUserDefaults] stringForKey:@"btnstate"];

    if([state isEqualToString:@"selected"])
    {
     [_PreCheck setBackgroundImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal];
        [_PreCheck setSelected:YES];
    }
    else
    {
        [_PreCheck setBackgroundImage:[UIImage imageNamed:"[email protected]"] forState:UIControlStateNormal];
        [_PreCheck setSelected:NO];

    }

    [_PreCheck addTarget:self action:@selector(checkboxSelected:) forControlEvents:UIControlEventTouchUpInside];

}

Now set the method for check-uncheck like following:

-(void)checkboxSelected:(UIButton*)sender
{
     sender.selected = !sender.selected;
    if([sender isSelected])
    {
        [_PreCheck setBackgroundImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal];

       [[NSUserDefaults standardUserDefaults] setValue:@"selected" forKey:@"btnstate"];

    }
    else
    {
        [_PreCheck setBackgroundImage:[UIImage im ageNamed:@"[email protected]"] forState:UIControlStateNormal];
     [[NSUserDefaults standardUserDefaults] setValue:@"notselected" forKey:@"btnstate"];
    }

}

Hope that work or you. just replace your code with my posted code no need to do other changes.

Upvotes: 3

Related Questions