如何从UIPickerView获取选定的值

74 cocoa-touch objective-c ios

我知道使用UIDatePicker,您可以使用以下内容:

NSDate *myDate = picker.date;
Run Code Online (Sandbox Code Playgroud)

但我在我的视图中使用UIPickerView.我怎样才能同样获得选择的价值?或者我是否必须设置didSelectRow类型的方法来执行此操作?

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

    NSInteger row;
    NSString *weightSelected;

    row = [repPicker selectedRowInComponent:0];
    weightSelected = [pickerArray objectAtIndex:row];
Run Code Online (Sandbox Code Playgroud)

我为这个带有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];
Run Code Online (Sandbox Code Playgroud)

SJS*_*SJS 126

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

NSInteger row;
NSArray *repeatPickerData;
UIPickerView *repeatPickerView;

row = [repeatPickerView selectedRowInComponent:0];
self.strPrintRepeat = [repeatPickerData objectAtIndex:row];
Run Code Online (Sandbox Code Playgroud)

  • 我不明白这个答案......究竟什么是repeatPickerData?如何填充? (4认同)
  • 什么是strPrintRepeat? (2认同)
  • strPrintRepeat只是一个存储PickerView字符串值的变量.那就是: - NSString*strPrintRepeat. (2认同)

nh3*_*2rg 33

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

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
Run Code Online (Sandbox Code Playgroud)

使用所选项目

[myPickerView selectedRowInComponent:0]
Run Code Online (Sandbox Code Playgroud)

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

[cell.label setText:[self pickerView:myPickerView titleForRow:[myPickerView selectedRowInComponent:1] forComponent:1]];
Run Code Online (Sandbox Code Playgroud)

只需更改两个:每个部分1s到:2s等

  • +1 - 这明显优于当前(废话)接受的答案.它更清楚,不使用尚未引入或解释的奇怪变量,并且不假设(没有说明)`UIPickerViewDelegate`从数组中获取行标题.坦率地说,这应该是公认的答案. (16认同)

Har*_*nan 6

这就是我做的:

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

    selectedEntry = [allEntries objectAtIndex:row];

}
Run Code Online (Sandbox Code Playgroud)

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


dre*_*wag 5

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

- (NSInteger)selectedRowInComponent:(NSInteger)component
Run Code Online (Sandbox Code Playgroud)

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