2009-09-07 8 views
20

Mam UIPickerView z 3 komponentami wypełnionymi 2 NSMutableArrays (2 komponenty mają tę samą tablicę).Uzyskaj wybrany wiersz w UIPickerView dla każdego komponentu

Tutorial mówi:

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

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

Ale chcę pokazać wybrany wiersz dla każdego składnika w UIAlertViewgdy użytkownik dotknął UIButton.

Czy istnieje sposób, aby to zrobić? Czy muszę po prostu użyć 3 niewidoczne UILabels jako bufor?

Z góry dziękuję.

Odpowiedz

46

Więc w swoim sposobie działania przycisków, można zrobić coś takiego:

- (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); 
} 

byłoby to absolutny formalny sposób do pobierania informacji (za pomocą odpowiedniego źródła danych i metod delegata), ale może być łatwiejszym (w zależności od konfiguracji), aby pobrać wybrany wiersz, a następnie wyciągnąć informacje bezpośrednio z modelu, zamiast przechodzić przez metodę delegowania.

+2

Dzięki! selectedRowInComponent jest właśnie tym, czego potrzebowałem. –

+2

Uhm, dlaczego używasz tu liczby całkowitej bez znaku? - [UIPickerView selectedRowInComponent:] może również zwrócić -1, jeśli nie ma wybranego wiersza. – datwelk

+0

Cool .. !!! To działa. – Siten

1

Swift 3 wersja:

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 
         } 
        } 
Powiązane problemy