Search code examples
iosobjective-cuisegmentedcontrol

Saving segmented controller position


I am facing an issue that my segmented controller is not saving its position after closing the application and opening it again.

My code is as per below:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.segmentedControlButtonStyle addTarget:self action:@selector(changeButtonStyle:) forControlEvents:UIControlEventValueChanged];

}

- (IBAction)changeButtonStyle:(id)sender {

    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.number.application"];
    NSInteger selectedSegmentedControlerIndex = self.segmentedControlButtonStyle.selectedSegmentIndex;

    if (sharedDefaults) {
        [sharedDefaults setInteger: selectedSegmentedControlerIndex forKey:@"MySelectedButtonStyleKey"];
        [sharedDefaults synchronize];
    }
}

The funny thing is that NSUserDefaults actually is saving correct index because from method I provided above if I change button style it will keep changed after closing and opening application again because I can see it by fact but segmented controller itself is not showing correct segment.

I am not sure why this is happening because I am synchronizing after each segment change but still segmented controller keeps its default position.


Solution

  • in view did load you should add code to set your saved segment

    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.number.application"];
    int mySegment = [sharedDefaults integerForKey:@"MySelectedButtonStyleKey"];
    
    if(mySegment) {
        self.segmentedControlButtonStyle.selectedSegmentIndex = mySegment;
    }