задаване на сегмент по подразбиране в UISegmentedControl

Имам приложение, което има два контролера Viewcontroller и OptionsViewController. Viewcontroller е първоначалният 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];

вътре в метода OptionsViewController viewdidload всичко работи добре. Защо не мога да го направя от метода подготовка за преминаване?


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


Отговори (2)


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

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

Задаването на selectedSegmentIndex в метода viewDidLoad на вашия OptionsViewController е правилният начин да зададете стойност по подразбиране на контролера на изгледа.

person T.J.    schedule 14.01.2012
comment
Намерих начин да заобиколя този проблем, като създадох едно свойство в OptionsViewController, наречено index, и го зададох на номера на сегмента, който исках да бъде избран директно от метода pripraveforsegue, и след това го приписах на segmentviewcontrol в заредения изглед. Благодаря ти за помощта - person Mppl; 15.01.2012

Просто използвайте този код, ако искате да го направите програмно

segmentControl.selectedSegmentIndex=-1;

Ако искате да го зададете от nib, тогава в създателя на интерфейс просто премахнете отметката от избраното свойство на индекса

person Desert Rose    schedule 16.01.2013