Изменить выбранный сегмент UISegmentedControl

У меня UISegmentedControl в моем ModeViewController

ModeViewController.h:

@property (weak, nonatomic) IBOutlet UISegmentedControl *Segment;
- (IBAction)switchMode:(id)sender;

ModeViewController.m:

- (IBAction)switchMode:(id)sender {
    //I Tried this way    
    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
    _Segment.selectedSegmentIndex = segmentedControl.selectedSegmentIndex;


//or this way
NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
[_Segment setSelectedSegmentIndex:selectedSegment];

}

Но как только я перейду на ViewController и вернусь, он будет отображать только выбранный по умолчанию сегмент! Есть идеи?


person user1354743    schedule 15.02.2013    source источник
comment
Это свойство должно быть strong.   -  person    schedule 15.02.2013
comment
Он использует IBOutlet, weak в порядке   -  person Daniel    schedule 15.02.2013


Ответы (3)


После того, как вы измените контроллер представления и вернетесь к методу viewDidLoad, вызванному снова, вот почему вы видите выбранный по умолчанию индекс. Способ преодолеть это - сохранить выбранный выбранный индекс в каком-либо свойстве делегата приложения, или вы можете создать одноэлементный класс для лучшего дизайна, чтобы сохранить состояние. И в вашем viewDidLoadMethod.

-viewDidLoad
{
  AppDelegate *delegate=[[UIApplication sharedAppliection]delegate];
  [_Segment setSelectedSegmentIndex:delegate.selectedIndex];
}

Это сработает для вас.

person V-Xtreme    schedule 15.02.2013
comment
У меня есть NSInteger в моем AppDelegate, и я сохраняю в нем индекс! каждый раз, когда я захожу в ViewDidLoad, я устанавливаю selectedSegment - person user1354743; 15.02.2013

Проблема

Проблема здесь в том, что когда Viewcontroller представлен модально, свойства внутри него имеют только время жизни, пока оно не будет закрыто.

Проверьте свой код, там будет создан экземпляр контроллера представления, который даст вам новый экземпляр, и в этом новом экземпляре будет показано управление сегментом из установленного значения пера (или все, что вы установили в методах viewDidload или ViewWillAppear

Решение

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

  [self.segment setSelectedSegmentIndex:storedIndex];

Для этой цели хранения существуют разные варианты

  1. Глобальная переменная в appDelegate
  2. NSUserDefaults
  3. CoreData
  4. Склайт
  5. список
  6. Текстовый файл

Самый простой из них - первый, но если вы уже реализуете что-либо из этого, поле для этого является значительным вариантом.

Удачного кодирования :)

person Lithu T.V    schedule 15.02.2013

Вам нужно сделать эту переменную selectedSegment глобальной в вашем приложении. вы можете определить это в AppDelegate

iPhone, как Переменная делегата приложения, которую можно использовать как глобальные переменные?

person Baby Groot    schedule 15.02.2013