Не мога да използвам segmentedControl, когато се опитвам да запомня избора на сегментиран контрол

имам проблем имам сегментирано управление и 2 бутона.

Тези 2 бутона водят до контролери за изглед на таблица, където потребителят избира входове

но когато потребителят избере сегмент на сегментиран контрол и отиде до контролера за изглед на таблица, изборът се връща към стандартния.

- (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 файл.

как мога да го използвам?

Или още по-добре, как мога да запомня избора на сегментиран контрол


person user3790582    schedule 02.07.2014    source източник
comment
Трябва да се случи по подразбиране...не трябва да му казвате кой раздел да маркира. Извикахте ли този метод selectionOfTransportation на събитието UIControlEventValueChanged за вашия UISegmentedControl?   -  person Zhang    schedule 02.07.2014
comment
не, никога не съм чувал за събитие UIControlEventValueChanged. Не го разбирам, казвате ли, че сегментираният контрол запомня селекцията по подразбиране, дори когато контролата за изглед се променя? @Zhang   -  person user3790582    schedule 02.07.2014
comment
Освен ако не искате да кажете, че вашият сегментиран контрол е вътре в UIViewController, който натискате върху стека за навигация, в противен случай вашият сегментиран контрол не трябва да променя избора си. Искате да кажете, че на главната ви страница имате UIViewController, който има сегментиран контрол и бутон 2, вие променяте избрания сегментен раздел, натискате един от бутоните, за да натиснете нов контролер за изглед, променяте някаква стойност, натискате бутона за връщане назад и вашия сегментираната контрола нулира избрания преди това раздел?   -  person Zhang    schedule 02.07.2014


Отговори (2)


моля, опитайте този пример.

първо пуснете и плъзнете сегмент в 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;
    }

}
person Rohit    schedule 02.07.2014

забравихте да синхронизирате userdefault. ако не синхронизирате стойността не се сортира

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

//Add This Line
[settings synchronize];

Това ще синхронизира потребителските настройки по подразбиране и можете да използвате в други контролери

person Moinuddin Girach    schedule 02.07.2014