如何从UIPickerView获取选定的值


76

我知道使用UIDatePicker,您可以使用类似以下内容的东西:

NSDate *myDate = picker.date;

但是我在视图中使用的是UIPickerView。我如何才能类似地获得所选值?还是我必须设置didSelectRow类型的方法来做到这一点?

更新:此代码适用于具有1个组件的选取器:

NSInteger row;
NSString *weightSelected;

row = [repPicker selectedRowInComponent:0];
weightSelected = [pickerArray objectAtIndex:row];

我为带有2个组件的选择器厌倦了这段代码,但它冻结了:

NSInteger row1, row2;
NSString *weightSelected1;
NSString *weightSelected2;

row1 = [repPicker selectedRowInComponent:0];
row2 = [repPicker selectedRowInComponent:1];
weightSelected1 = [pickerArray objectAtIndex:row1];
weightSelected2 = [pickerArray objectAtIndex:row2];
NSString *weightSelected = [NSString stringWithFormat:@"%@.%@", weightSelected1, weightSelected2];

Answers:


128

您可以通过以下方式获得它:

NSInteger row;
NSArray *repeatPickerData;
UIPickerView *repeatPickerView;

row = [repeatPickerView selectedRowInComponent:0];
self.strPrintRepeat = [repeatPickerData objectAtIndex:row];

2
strPrintRepeat就是一个变量,它存储PickerView的字符串值。那是:-NSString * strPrintRepeat。
SJS

感谢Jay,我将它与具有一个组件的选取器一起使用。尽管可以与具有2个组件的选择器一起使用,但您可以帮助修改它吗?我在问题谢谢中添加了我用于1个组件选择器的确切代码。

4
我不明白这个答案... repeatPickerData到底是什么?那怎么填充?
zakdances

@yourfriendzak repeatPickerData在这里我刚刚声明过,但是不会在这里出现。它会出现在viewDidLoad方法上,并且包含我们将在UIPickerView中显示的值。感谢您提出问题,如果您仍然有疑问,欢迎您提出问题。
SJS 2012年

对于这种情况,请稍作澄清。NSLog(@“%@”,[self.arrayFields objectAtIndex:[self.queryPicker1 selectedRowInComponent:0]]);; 其中arrayFields是UIPickerView的数据数组。其中queryPicker1是UIPickerView。其中selectedRowInComponent:0是UIPickerView的第一列(如果选择器中有2列,并且希望第二列的值使用1而不是0)。
sangony 2014年

34

您可以使用自定义ViewController类中与pickerView相同的功能在选择器的任何部分中获取所选项目的文本:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

使用所选项目

[myPickerView selectedRowInComponent:0]

因此可以使用myPickerView第2部分(可能是您的视图控制器的属性)中当前选择的值在自定义单元格中设置标签的文本

[cell.label setText:[self pickerView:myPickerView titleForRow:[myPickerView selectedRowInComponent:1] forComponent:1]];

只需将每个部分的:1s更改为:2s,依此类推


16
+1-明显好于当前(废话)接受的答案。更清楚的是,它不使用尚未引入或解释的奇怪变量,并且不假定(未说明)UIPickerViewDelegate从数组中获取行标题。坦白说,这应该是公认的答案。
Mark Amery 2013年

7

这是我所做的:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    selectedEntry = [allEntries objectAtIndex:row];

}

selectedEntryNSString和将持有pickerview当前的选择项。我是目标C的新手,但我认为这要容易得多。


5

您可以使用以下方法访问给定组件的选定行:

- (NSInteger)selectedRowInComponent:(NSInteger)component

否则,实现委托功能是唯一的其他选择。


好吧,好吧,我目前有一个dimissPicker按下提交按钮时调用的方法。我希望在调用dissmissPicker方法时选择的值可以保存或更新按钮等。我怎样才能做到这一点?我需要添加selectedRowInCompnent方法吗?

是的,这可能是最好的方法,是
drewag

好的,可以帮我设置这个吗?我刚刚添加了该selectedRowInComponent方法,但是该如何使用呢。它应该返回选择的值。我在答题器中也有2个组件。

您可以将委托设置为跟踪选择器的选定值。每次用户更改组件时,都会调用该函数。您可以使用选定的行从用于填充它的数组中获取值,然后将该状态保存在委托中,以便以后要永久保存该值时进行访问
drewag

2

您将需要以与您的应用程序相同的方式询问选择器的委托。这是我在UIPickerViewDelegate中执行的操作:

func selectedRowValue(picker : UIPickerView, ic : Int) -> String {

    //Row Index
    let ir  = picker.selectedRow(inComponent: ic);

    //Value
    let val = self.pickerView(picker,
                              titleForRow:  ir,
                              forComponent: ic);
    return val!;
}

0

您必须使用didSelectRow委托方法,因为aUIPickerView可以具有任意数量的组件。没有“ objectValue”或类似的东西,因为这完全取决于您。


0

获取选择器的选定标题:

let component = 0
let row = picker.selectedRow(inComponent: component)
let title = picker.delegate?.pickerView?(picker, titleForRow: row, forComponent: component)

0
       NSInteger SelectedRow;
                   SelectedRow = [yourPickerView selectedRowInComponent:0];
                   selectedPickerString = [YourPickerArray objectAtIndex:SelectedRow];
                   self.YourTextField.text= selectedPickerString;

    // if  you want to move pickerview to selected row then 
 for (int i = 0; I<YourPickerArray.count; i++) {
  if ([[YourPickerArray objectAtIndex:i] isEqualToString:self.YourTextField.text]) { 
[yourPickerView selectRow:i inComponent:0 animated:NO];
 }
}

1
如果可能,请尝试提供其他说明,而不只是提供代码。这样的答案往往会更有用,因为它们可以帮助社区成员,尤其是新开发人员更好地了解解决方案的理由,并可以帮助防止需要解决后续问题。
拉詹

好的。感谢您的提示
maan89

-2
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
   weightSelected = [pickerArray objectAtIndex:row];
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.