繁体   English   中英

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

[英]Get selected row in UIPickerView for each component

我有一个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);
}

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

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

提前致谢。

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

- (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);
}

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

斯威夫特 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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM