Получить выбранное значение 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)