IPhone: UISegmentedControl, how to remember an index after navigation?

I have a segment on my tableview controller.

segmentIndex = 0 -> tableView loads -> click. transition to another TableViewController. segmentIndex = 1 -> tableView loads -> click. Transition to another TableViewController.

Switching table views is normal. The problem is that after navigating back I need to remember the previous index value. How to implement it? My current code is:

- viewWillAppear
self.segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Nominals",@"Coinage",nil]];
[self.segment setFrame:CGRectMake(80, 0, 200, 30)];
[self.segment setSegmentedControlStyle:UISegmentedControlStyleBar];
//self.segment.selectedSegmentIndex=0;
[self.segment addTarget:self action:@selector(segmentValueChaged:) forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:self.segment];


-(IBAction)segmentValueChaged:(id)sender
{
switch (self.segment.selectedSegmentIndex) 
{
    case 0:
    {
        DBAccess *access=[[DBAccess alloc]init];
        self.items=[access returnNominals:self.subCountryID nk:fromPeriod];
        [access closeDataBase];
        self.tableView.hidden=NO;
        [self.tableView reloadData];
        self.segmentIndex=0;
         break;
    }
    case 1:
    {
        DBAccess *access=[[DBAccess alloc]init];
        self.coinageArr=[access returnCoinage:fromPeriod period:subCountryID];
        self.tableView.hidden=NO;
        [self.tableView reloadData];
        self.segmentIndex=1;
        break;
    }
}
}

Thanks in advance guys.

EDIT:

self.segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Nominals",@"Coinage",nil]];
[self.segment setFrame:CGRectMake(80, 0, 200, 30)];
[self.segment setSegmentedControlStyle:UISegmentedControlStyleBar];
if(!self.segmentIndex)
{
    self.segment.selectedSegmentIndex=-1;
}
else 
{
    self.segment.selectedSegmentIndex=self.segmentIndex;
}

//self.segment.selectedSegmentIndex=self.segmentIndex;
[self.segment addTarget:self action:@selector(segmentValueChaged:) forControlEvents:UIControlEventValueChanged];
[[self navigationItem] setTitleView:self.segment];


-(void)viewWillDisappear:(BOOL)animated
{
switch (self.segment.selectedSegmentIndex) 
{
    case 0:
    {
        self.segmentIndex=0;
        break;
    }
    case 1:
    {
        self.segmentIndex=1;
        break;
    }
}

}
+3
source share
2 answers

viewWillDisappear, viewWillAppear, , . , ... -1. viewWillAppear -1, , .

- (void)viewWillAppear:(BOOL)animated {
    self.segment=[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Nominals",@"Coinage",nil]];
    [self.segment setFrame:CGRectMake(80, 0, 200, 30)];
    [self.segment setSegmentedControlStyle:UISegmentedControlStyleBar];

    if (self->_currentIndex == -1) {
        NSInteger myDefaultValue = 0;
        self.segment.selectedSegmentIndex=myDefaultValue;
    } else {
        self.segment.selectedSegmentIndex=self->_currentIndex;
    }

   [self.segment addTarget:self action:@selector(segmentValueChaged:) forControlEvents:UIControlEventValueChanged];
   [[self navigationItem] setTitleView:self.segment];
}

, - .

- (void)viewWillDisappear:(BOOL)animated {
    self->_currentIndex = self.segment.selectedSegmentIndex;
}

NSInteger _currentIndex;

+3

NSUserDefaults, , , viewWillAppear NSUserDefaults .

:

-(IBAction)segmentValueChaged:(id)sender
 {
      switch (self.segment.selectedSegmentIndex)
      {
         case 0:
         { 
              // --some code--
              break;   
         }

         case 1  
         {
              //--some code--
              break;

          }  
         default:
          break;
       }

// NSUserDefaults :
 // .

**NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];**

// .

**[settings setInteger:self.segment.selectedSegmentIndex forKey:@"MySelectedValueKey"];**

}  

WillAppear NSUserDefaults; , .

    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
    if([settings objectForKey:@"MySelectedValueKey"] == 0)   
    {
      //Set up for index 0
    }

    if([settings objectForKey:@"MySelectedValueKey"] == 1)   
    {
       //Set up for index 1  
    }  

:)

+2

All Articles