Я не могу использовать segmentedControl, когда пытаюсь запомнить выбор сегментированного элемента управления

#ios #objective-c #uisegmentedcontrol

#iOS #objective-c #uisegmentedcontrol

Вопрос:

у меня проблема, у меня есть сегментированный элемент управления и 2 кнопки.

Эти 2 кнопки ведут к контроллерам табличного представления, где пользователь выбирает входные данные

но когда пользователь выбирает сегмент сегментированного элемента управления и переходит к контроллеру tableview, выбор возвращается к значению по умолчанию.

 - (IBAction)selectionOfTransportation:(id)sender {

     ran =((UISegmentedControl *)sender).selectedSegmentIndex;
    NSLog(@"%d",ran);

    switch (ran) {
        case 0://vapur
            NSLog(@"0 ");
             path = [[NSBundle mainBundle] pathForResource:@"vapurWeekdays" ofType:@"plist"];
            arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];

            ran=0;
            break;
        case 1:
             NSLog(@"1");
            path = [[NSBundle mainBundle] pathForResource:@"denizotobus" ofType:@"plist"];
            arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];
            ran=1;

            break;
        case 2:

            break;
    }

    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];



    [settings setInteger:ran forKey:@"MySelectedValueKey"];

}
  

это мой код.

Я сохранил значение в NSUserDefaults и попытался изменить выбор, но, похоже, нигде не могу использовать segment.selectedSegmentIndex!

Сначала я определил сегментированный элемент управления как действие, но я даже пытался определить его в файле .h.

как я могу это использовать?

Или, что еще лучше, как я могу запомнить выбор сегментированного элемента управления

Комментарии:

1. Это должно происходить по умолчанию… вам не нужно указывать, какую вкладку выделить. Вызывали ли вы этот метод «selectionOfTransportation» в событии UIControlEventValueChanged для вашего UISegmentedControl?

2. нет, никогда не слышал о событии UIControlEventValueChanged. Я не понимаю, вы говорите, что сегментированный элемент управления запоминает выбор по умолчанию, даже если изменяется элемент управления просмотром? @Zhang

3. Если вы не имеете в виду, что ваш сегментированный элемент управления находится внутри UIViewController, который вы помещаете в стек навигации, в противном случае ваш сегментированный элемент управления не должен изменять свой выбор. Вы имеете в виду, что на вашей главной странице у вас есть UIViewController, у которого есть сегментированный элемент управления и кнопка 2, вы меняете выбранную вкладку сегмента, нажимаете одну из кнопок, чтобы нажать новый контроллер представления, измените какое-либо значение, нажмите кнопку «Назад», и ваш сегментированный элемент управления сбрасывает ранее выбранную вкладку?

Ответ №1:

пожалуйста, попробуйте этот пример.

сначала отбросьте и перетащите сегмент в xib.

в файле .h

 IBOutlet UISegmentedControl *mySegmentedControl;
  

в файле .m

 - (void)viewDidLoad
{
    [super viewDidLoad];

   [mySegmentedControl setSelectedSegmentIndex:0];
[mySegmentedControl addTarget:self action:@selector(segmentSwitch:)
                 forControlEvents:UIControlEventValueChanged];
}


- (IBAction)segmentSwitch:(id)sender
{
    int ran=mySegmentedControl.selectedSegmentIndex;

       **or**

    int ran;
    if(mySegmentedControl.selectedSegmentIndex == 0)
    {
      ran=0;
    }
    else if(mySegmentedControl.selectedSegmentIndex == 1)
    {
      ran=1;  
    }
    else if(mySegmentedControl.selectedSegmentIndex == 2)
    {
        ran=2;
    }
    else if(mySegmentedControl.selectedSegmentIndex == 3)
    {
        ran=3;
    }

}
  

Ответ №2:

вы забыли синхронизировать userdefault. если вы не синхронизируете, значение не отображается

 NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
[settings setInteger:ran forKey:@"MySelectedValueKey"];

//Add This Line
[settings synchronize];
  

Это синхронизирует пользовательские ошибки, и вы можете использовать их в других контроллерах