установка сегмента по умолчанию в UISegmentedControl - PullRequest
5 голосов
/ 14 января 2012

У меня есть приложение, которое имеет два viewcontroller Viewcontroller и OptionsViewController. Viewcontroller является начальным viewcontroller, тогда, если я нажму кнопку, у меня будет модальный переход к optionsviewconcontroller. Там в 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 мог устанавливать выбранный индекс по умолчанию. Я не знаю, что еще может быть причиной этого. Спасибо

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

 [ovc.UnitsSegmentedControl setSelectedSegmentIndex:1];

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

Ответы [ 2 ]

4 голосов
/ 14 января 2012

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

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

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

3 голосов
/ 16 января 2013

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

segmentControl.selectedSegmentIndex=-1;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...