获取UIPickerView当前选定的值

12

我一直在谷歌上搜寻如何获取UIPickerView当前所选值,但无论哪里都是使用row:0等方式提到。

我有一个UIPickerView,其中填充了诸如"One","Two"等字符串值。

现在当我选择一个值,比如说"Two",是否有任何方法可以获取这个文本。

就像在UITextView中使用_textview.text一样。

6个回答

22

每个UIPickerView都应该有一个代理。

你可以通过类似以下的方式向代理请求你的选择器选中行的标题:

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

(这是基于您的组件编号为零的假设; 您自己的实现可能会有所不同。)

这里可以查看关于“pickerView:titleForRow:forComponent”方法的更多文档


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

}

3
这怎么回答问题了?这甚至不是Objective-C代码。 - benka
13
如果每个Objective-C问题都有一个Swift的答案(其中Q&A远远不如),那么许多Swift开发者的生活将变得更加轻松。谢谢@Quad! - Fares K. A.
1
感谢您提供这个 Swift 版本。 - Jayson Tamayo

5

首先在.h文件中添加UIPickerViewDatasource和UIPickerViewDelegate。

然后在.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(change the parameter 0 if you have more than one component)。

这是您数据数组中的索引值(myArray),就像您在委托方法中返回数据时使用的那样,例如:

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

(或类似的代理方法 -attributedTitleForRow -viewForRow)

3

Swift 3

你可以使用以下代码获取当前页面的标题:

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

1
如果您使用数组来初始化选择器,可以使用以下方法:
let p0 = pickerArray[0][pickerViewOutlet.selectedRow(inComponent: 0)]
let p1 = pickerArray[1][pickerViewOutlet.selectedRow(inComponent: 1)]
let p2 = pickerArray[2][pickerViewOutlet.selectedRow(inComponent: 2)]

etc.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接