我有一个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
作为缓冲区吗?
提前致谢。
答案 0 :(得分:46)
因此,在您的按钮操作方法中,您可以执行以下操作:
- (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);
}
这将是检索信息的绝对正式方式(通过使用正确的数据源和委托方法),但可能更容易(取决于您的设置),只需抓取所选行,然后将信息从你的模型直接,而不是通过委托方法。
答案 1 :(得分:1)
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
}
}