3

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

}
4

2 回答 2

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;您在界面中定义的位置

于 2012-04-30T16:28:18.307 回答
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  
    }  

乐意效劳 :)

于 2012-04-30T17:20:33.633 回答