2012-01-14 5 views
5

Ho un'app con due Viewcontroller Viewcontroller e OptionsViewController. Viewcontroller è il viewcontroller iniziale, quindi se faccio clic su un pulsante ho un passaggio modale a optionsviewcontroller. Lì in optionsviewcontroller ho I viewcontroller UISegmented creato dallo storyboard che è collegato a una presa (UnitsSegmentedControl) e voglio essere in grado di dire al controllo segmentato quale segmento deve essere selezionato per impostazione predefinita quando viene caricato OptionsViewController. Nel mio viewController ho scritto un metodo:impostazione del segmento predefinito in UISegmentedControl

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

la cosa è quando OptionsViewController carica la vista l'indice selezionato è 0, come per impostazione predefinita. Non ricevo alcun messaggio di errore o qualcosa del genere. Sto usando Xcode 4.2. Penso che potrebbe essere un'opzione che posso cambiare nello storyboard per rendere UISegmentedControl in grado di impostare l'indice selezionato predefinito. Non so cos'altro potrebbe causare questo. Grazie

EDIT: ho capito che se scrivo:

[ovc.UnitsSegmentedControl setSelectedSegmentIndex:1]; 

all'interno OptionsViewController metodo viewDidLoad tutto funziona bene. Perché non riesco a farlo dal metodo di preparazione per i passaggi?

risposta

4

Il controllo segmentato non esiste finché non viene caricato OptionsViewController, motivo per cui non è possibile impostare il segmento selezionato nel metodo prepareForSegue di ViewController. Revisionare il riferimento alla classe UISegmentedControl rivela che non esiste un modo per impostare uno stato predefinito:

"Il valore predefinito è UISegmentedControlNoSegment (nessun segmento selezionato) finché l'utente non tocca un segmento. Impostare questa proprietà su -1 per disattivare la corrente selezione UISegmentedControl ignora questa proprietà quando il controllo è in modalità momentanea Quando l'utente tocca un segmento per modificare la selezione, viene generato l'evento di controllo UIControlEventValueChanged, se il controllo segmentato è impostato per rispondere a questo evento di controllo, invia un'azione messaggio al suo obiettivo. "

L'impostazione di SegmentIndex nel metodo viewDidLoad di OptionsViewController è il modo corretto per impostare un valore predefinito per il controller di visualizzazione.

+0

ho trovato un modo per aggirare questo problema creando una proprietà in OptionsViewController chiamata index e impostandola sul numero del segmento che volevo selezionare direttamente dal metodo prepareforsegue e poi assegnarlo al segmentviewcontrol nella vista caricata. grazie per l'aiuto – Mppl

3

basta usare questo codice se si vuole fare a livello di codice

segmentControl.selectedSegmentIndex=-1; 

Se si desidera impostare da pennino poi nel costruttore di interfaccia basta deselezionare proprietà selezionata dell'indice