2009-09-07 9 views
20

Ho un UIPickerView con 3 componenti popolati con 2 NSMutableArrays (2 componenti hanno lo stesso array).Ottieni riga selezionata in UIPickerView per ciascun componente

Un tutorial dice:

//PickerViewController.m 
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row); 
} 

Ma io voglio mostrare la riga selezionata per ogni componente in un UIAlertViewdopo che l'utente ha toccato un UIButton.

C'è un modo per farlo? O devo semplicemente usare 3 invisibili UILabels come buffer?

Grazie in anticipo.

risposta

46

Così, nel metodo di azione pulsante, è possibile fare qualcosa di simile:

- (IBAction) showAlert { 
    NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView]; 

    NSMutableString * text = [NSMutableString string]; 
    for(NSUInteger i = 0; i < numComponents; ++i) { 
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i]; 
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i]; 
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i]; 
    } 

    NSLog(@"%@", text); 
} 

questo sarebbe il modo formale assoluto per recuperare informazioni (utilizzando la corretta origine dati e metodi delegato), ma potrebbe essere più semplice (a seconda del tuo set up), solo prendere la riga selezionata e quindi estrarre le informazioni dal tuo modello direttamente, invece di passare attraverso il metodo delegate.

+2

Grazie! selectedRowInComponent è proprio quello di cui avevo bisogno. –

+2

Uhm, perché stai usando un intero senza segno qui? - [UIPickerView selectedRowInComponent:] può anche restituire -1 se non ci sono righe selezionate. – datwelk

+0

Cool .. !!! Funziona. – Siten

1

Swift 3 Versione:

var value = "" 
for i in 0..<numberOfComponents { 
         let selectedRow = pickerView.selectedRow(inComponent: i) 
         if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) { 
          value += s 
         } 
        } 
Problemi correlati