【问题标题】:iPhone: UISegmentedControl, how to make remember the index after navigating back?iPhone:UISegmentedControl,导航返回后如何记住索引?
【发布时间】:2013-11-21 19:33:20
【问题描述】:

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

segmentIndex=0 -> 加载表格视图 -> 点击。导航到另一个 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;
    }
}

}

【问题讨论】:

    标签: iphone objective-c ios uisegmentedcontrol


    【解决方案1】:

    您将值存储在 viewWillDisappear 中,当您返回控制器 viewWillAppear 时,您将设置回存储的值。因此,您还可以做的是,首先将值设置为...假设-1。如果你的viewWillAppearvalue 是-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; 的位置

    【讨论】:

    • 我试着按照你建议的方式去做。将在几分钟后发布编辑,但没有成功。
    • 请参阅编辑。它也不起作用。我哪里出错了?
    【解决方案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  
        }  
    

    乐于助人:)

    【讨论】:

    • 这也是个好主意,但我在其他情况下使用 NSUerDefaults。谢谢你的回答。
    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    相关资源
    最近更新 更多