[英]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.