根据另一个pickerview的值选择更改pickerview的值

时间:2014-04-02 05:11:24

标签: xcode

我有两个选择器视图p1和p2,并且p1数据在解析后出现,p2的值取决于在p1中选择的值,所以当我们在p1中选择不同的不同值时,p2的值将会改变解析后也会出现p2中的值。所以为此我需要在p1中选择的值的名称和id,我得到了名称,因为我将收到在文本框中写的名称,但问题是如何根据名称获取id。

1 个答案:

答案 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];
    }
}

不幸的是,具体的代码细节会根据支持您的选择器视图的模型而有所不同,但希望这说明了基本的想法。