我有两个选择器视图p1和p2,并且p1数据在解析后出现,p2的值取决于在p1中选择的值,所以当我们在p1中选择不同的不同值时,p2的值将会改变解析后也会出现p2中的值。所以为此我需要在p1中选择的值的名称和id,我得到了名称,因为我将收到在文本框中写的名称,但问题是如何根据名称获取id。
答案 0 :(得分:2)
titleForRow
p2
{/ 1}}应该(a)确定p1
中选择的行; (b)使用该标识,使用row
中的p2
参数来标识要为标题返回的字符串:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (pickerView == self.p1) {
// do whatever you're doing for p1
} else if (pickerView == self.p2) {
NSInteger p1Row = [self.p1 selectedRowInComponent:0];
// now lookup identifier in `p1` associated with row `p1Row`
// now that you have the identifier for `p1`, now look up the text strings
// for `p2` on the basis of (a) that identifier; and (b) the `row` number
// passed to this method
return ...; // now return the title
}
return nil;
}
显然,当您在p1
中更改选择时,可以重新加载p2
。以下是一个快速淡入淡出过渡,以使过渡不那么刺耳:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (pickerView == self.p1) {
[UIView transitionWithView:self.p2 duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
[self.p2 reloadAllComponents];
[self.p2 selectRow:0 inComponent:0 animated:NO];
} completion:nil];
}
}
不幸的是,具体的代码细节会根据支持您的选择器视图的模型而有所不同,但希望这说明了基本的想法。