установка сегмента по умолчанию в UISegmentedControl

У меня есть приложение с двумя контроллерами представления Viewcontroller и OptionsViewController. Viewcontroller является начальным контроллером представления, тогда, если я нажму кнопку, у меня будет модальный переход к optionsviewcontroller. Там в optionsviewcontroller у меня есть UISegmented viewcontroller, созданный из раскадровки, которая связана с выходом (UnitsSegmentedControl), и я хочу иметь возможность указать сегментированному элементу управления, какой сегмент должен быть выбран по умолчанию при загрузке OptionsViewController. В моем Viewcontroller я написал метод:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
OptionsViewController *ovc=[segue destinationViewController];
ovc.delegate=self;
[ovc.UnitsSegmentedControl setSelectedSegmentIndex:1];

дело в том, что когда OptionsViewController загружает представление, выбранный индекс равен 0 по умолчанию. Я не получаю сообщения об ошибке или что-то в этом роде. Я использую Xcode 4.2. Я думаю, что это может быть какой-то вариант, который я могу изменить в раскадровке, чтобы UISegmentedControl мог установить выбранный индекс по умолчанию. Я не знаю, что еще может быть причиной этого. Спасибо

РЕДАКТИРОВАТЬ: я понял, что если я напишу:

 [ovc.UnitsSegmentedControl setSelectedSegmentIndex:1];

внутри метода Viewdidload OptionsViewController все работает нормально. Почему я не могу сделать это из метода подготовки к переходу?


person Mppl    schedule 14.01.2012    source источник


Ответы (2)


Сегментированный элемент управления не существует, пока не загружен OptionsViewController, поэтому вы не можете установить выбранный сегмент в методе prepareForSegue вашего ViewController. Просмотрите Справочник по классу UISegmentedControl, чтобы узнать, что нет способа установить состояние по умолчанию:

«Значение по умолчанию — UISegmentedControlNoSegment (сегмент не выбран) до тех пор, пока пользователь не коснется сегмента. Установите для этого свойства значение -1, чтобы отключить текущий выбор. UISegmentedControl игнорирует это свойство, когда элемент управления находится в мгновенном режиме. Когда пользователь касается сегмента, чтобы изменить выбор, генерируется событие элемента управления UIControlEventValueChanged; если сегментированный элемент управления настроен для ответа на это событие элемента управления, он отправляет сообщение о действии своей цели».

Установка selectedSegmentIndex в методе viewDidLoad вашего OptionsViewController — это правильный способ установить значение по умолчанию для контроллера представления.

person T.J.    schedule 14.01.2012
comment
Я нашел способ обойти эту проблему, создав одно свойство в OptionsViewController с именем index и установив для него номер сегмента, который я хотел выбрать непосредственно из метода prepareforsegue, а затем присвоив его элементу управления segmentview в представлении, которое было загружено. Спасибо за помощь - person Mppl; 15.01.2012

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

segmentControl.selectedSegmentIndex=-1;

Если вы хотите установить его из пера, то в построителе интерфейса просто снимите флажок с выбранного свойства индекса.

person Desert Rose    schedule 16.01.2013