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

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

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

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

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

Ответ 1

Каждый UIPickerView должен иметь делегат.

И вы можете попросить этого делегата выбрать свой заголовок выбранной строки следующим образом:

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

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

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

Ответ 2

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

}

Ответ 3

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

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

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

Ответ 4

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

NSInteger indexSelected = [myPicker selectedRowInComponent:0];

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

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

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

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

Ответ 5

Swift 3

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

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