2012-01-14 4 views
5

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

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

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

EDIT: Я понял, что если я пишу:

[ovc.UnitsSegmentedControl setSelectedSegmentIndex:1]; 

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

ответ

4

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

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

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

+0

Я нашел способ обойти эту проблему создав одно свойство в OptionsViewController, называемом индексом, и установив его на номер сегмента, который я хотел выбрать непосредственно из метода prepareforsegue, а затем присвоил его сегменту viewcontrol в представлении. спасибо за помощь – Mppl

3

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

segmentControl.selectedSegmentIndex=-1; 

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

Смежные вопросы