iPhone:UISegmentedControl,如何在导航后记住索引?

时间:2012-04-30 16:19:43

标签: iphone objective-c ios uisegmentedcontrol

我的tableview控制器上有一个段。

segmentIndex = 0 - > tableView加载 - >挖掘。导航到另一个tableViewController。 segmentIndex = 1 - > tableView加载 - >挖掘。导航到另一个tableViewController。

切换tableviews很好。问题是在导航回来后我需要记住以前的索引值。怎么实现呢?我目前的代码:

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

先谢谢你们。

编辑:

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

}

2 个答案:

答案 0 :(得分:3)

您将值存储在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;的位置

答案 1 :(得分:2)

您可以将索引值存储在 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"];**

}  

在你的viewWillAppear中你可以从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  
    }  

乐意提供帮助:)