2014-04-18 16 views
10

Byłem googling, jak uzyskać aktualnie wybranej wartości w UIPickerView, ale wszędzie jest to wymienione za pomocą wiersza: 0 i tak dalej.Pobierz aktualnie wybraną wartość UIPickerView

Mam UIPickerView wypełniane wartościami strunowych jak „jeden”, „dwa”, itd

Teraz, kiedy wybrać wartość powiedzmy, „dwa”, to mimo to mogę dostać ten tekst.

Podobnie jak w UITextView gdzie jest _textview.text

Odpowiedz

21

Każdy UIPickerView powinien mieć delegata.

I można zadać to delegat wybrany tytuł wiersza Twojego oknie wyboru przez coś podobnego:

UIPickerViewDelegate *delegate = yourPickerView.delegate; 
    NSString *titleYouWant = [delegate pickerView:yourPickerView titleForRow:[yourPickerView selectedRowInComponent:0] forComponent:0]; 

(To jest Zakładając numer składnika wynosi zero; własne implementacja może być inny).

More documentation on the "pickerView:titleForRow:forComponent" method can be seen here.

+0

To działało. dzięki – rbk

3

Jeśli UIPickerView ma tylko jeden komponent (coś podobnego do sekcji dla UITableView) można pobrać „indeks” wybrany z następującej linii:

NSInteger indexSelected = [myPicker selectedRowInComponent:0]; 

(zmiana parametru 0, jeśli masz więcej niż jeden składnik).

Jest to indeks w tablicy danych (MyArray), ten sam użyłeś aby powrócić danych z metody delegata, jak w:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
return myArray[row]; 
} 

(lub podobne metody delegata -attributedTitleForRow -viewForRow)

5

Przede wszystkim dodać UIPickerViewDatasource i UIPickerViewDelegate w pliku .h

następnie w .m dodać linię

self.myPickerView.delegate = self; 

teraz przypisz tablicę według jej obiektów.

NSArray *arrOfAge = [[NSArray alloc]initWithObjects:@“one”,@”two”, nil]; 

to sposoby dalej przekazać

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [arrOfAge count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    NSString *titleRow; 
    titleRow = [NSString stringWithFormat:@"%@", [arrOfAge objectAtIndex:row]]; 
    return titleRow; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    selectedRow = row; 
} 

to IBAction btnDone zwraca wybrany wiersz z pickerView.

- (IBAction)btnDone:(id)sender 
{ 
    NSUInteger num = [[self.myPickerView dataSource] numberOfComponentsInPickerView:self.myPickerView]; 
    NSMutableString *text = [NSMutableString string]; 
    for(NSUInteger i =0;i<num;++i) 
    { 
     NSUInteger selectRow = [self.myPickerView selectedRowInComponent:i]; 
     NSString *ww = [[self.myPickerView delegate] pickerView:self.myPickerView titleForRow:selectRow forComponent:i]; 
     [text appendFormat:@"%@",ww]; 
     NSLog(@"%@",text); 
    } 
} 
16
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int) 
{ 
    // selected value in Uipickerview in Swift 
    let value=array[row] 
    println("values:----------\(value)"); 

} 
+2

jak to odpowiada na pytanie? nie jest to nawet kod obj-cny – benka

+10

Jeśli każde pytanie z Objective-C zawierało odpowiedź w Swift (którego nie ma nawet w pobliżu tylu Q & A), to życie wielu twórców Swift byłoby o wiele łatwiejsze. Dziękuję @Quad! –

+0

Dzięki za tę wersję Swift –

1

Swift 3

można użyć tego kodu na uzyskanie bieżący tytuł

self.textview.text = self.pickerView(self.pickerViewOutlet, titleForRow: self.pickerViewOutlet.selectedRow(inComponent: 0), forComponent: 0) 
Powiązane problemy