Получить выбранное значение UIPickerView

я гуглил, как получить текущее выбранное значение в UIPickerView, но везде он упоминается с помощью row:0 и так далее.

У меня есть UIPickerView, заполненный строковыми значениями, такими как "один","два" и т. д.

теперь, когда я выбираю значение, скажем, "два", есть ли в любом случае я могу получить этот текст.

Как в UITextView, где это _textview.текст

5 ответов


У каждого UIPickerView должен быть делегат.

и вы можете попросить этого делегата для выбранного заголовка строки вашего выбора через что-то вроде:

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

(Это предполагая, что ваш номер компонента равен нулю; ваша собственная реализация может отличаться).

дополнительная документация по "pickerView:titleForRow:forComponent " метод можно увидеть здесь.


func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
    // selected value in Uipickerview in Swift
    let value=array[row]
    println("values:----------\(value)");

}

прежде всего добавьте UIPickerViewDatasource и UIPickerViewDelegate.файл H

затем в .м добавьте строку

self.myPickerView.delegate = self;

теперь назначьте массив его объектами.

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

это методы делегирования

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

это IBAction btnDone возвращает выбранную строку из 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);
    }
}

Если UIPickerView имеет только один компонент (что-то похожее на раздел для UITableView), вы можете получить "индекс", выбранный со следующей строкой:

NSInteger indexSelected = [myPicker selectedRowInComponent:0];

(измените параметр 0, если у вас более одного компонента).

это индекс в вашем массиве данных (myArray), тот же, который вы использовали для возврата данных из метода делегата, как в:

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

(или аналогичные методы делегата-attributedTitleForRow-viewForRow)


Swift 3

вы можете использовать этот код для получения нынешнее название

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