获取 UIPickerView 中每个组件的选定行

Posted

技术标签:

【中文标题】获取 UIPickerView 中每个组件的选定行【英文标题】:Get selected row in UIPickerView for each component 【发布时间】:2009-09-07 14:55:38 【问题描述】:

我有一个UIPickerView,其中包含 3 个组件,其中填充了 2 个 NSMutableArrays(2 个组件具有相同的数组)。

一个教程说:

//PickerViewController.m
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row);

但我想在UIAlertView 在用户触摸 UIButton 后显示每个组件的选定行

有没有办法做到这一点?还是我必须只使用 3 个不可见的UILabels 作为缓冲区?

提前致谢。

【问题讨论】:

这能回答你的问题吗? How To Get Selected Value From UIPickerView 【参考方案1】:

因此,在您的按钮操作方法中,您可以执行以下操作:

- (IBAction) showAlert 
  NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView];

  NSMutableString * text = [NSMutableString string];
  for(NSUInteger i = 0; i < numComponents; ++i) 
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i];
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i];
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i];
  

  NSLog(@"%@", text);

这将是检索信息的绝对正式方式(通过使用正确的数据源和委托方法),但它可能更容易(取决于您的设置),只需抓取选定的行,然后将信息拉出直接使用您的模型,而不是通过委托方法。

【讨论】:

谢谢! selectedRowInComponent 正是我所需要的。 呃,你为什么在这里使用无符号整数? -[UIPickerView selectedRowInComponent:] 如果没有选中的行,也可以返回-1。【参考方案2】:

Swift 3 版本:

var value = ""
for i in 0..<numberOfComponents 
    let selectedRow = pickerView.selectedRow(inComponent: i)
    if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) 
        value += s
    

【讨论】:

以上是关于获取 UIPickerView 中每个组件的选定行的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIPickerView 中选定行的颜色

在 Swift 中为选定的 UIPickerView 行设置动画背景颜色

从 UIPickerView 的选定行设置 UIButton 的标题

如何从UIPickerView获取选定的值

UIPickerView从中间的选定行开始

如何使用 UIPickerView 的选定值作为通知的时间间隔?