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