UIPicker单个组件显示多个数组

时间:2014-07-25 02:44:54

标签: ios objective-c arrays uipickerview

第一条评论,所以我希望我这样做。

我和UIPicker打架了。我试图在一个选择器组件中显示2列数据。我选择在1个组件中执行此操作的原因是我希望数组一起滚动,我无法获得多个组件。

问题是,我无法通过这种方式工作,因为titleForRow和viewForRow只会返回一个值(根据C的规则)。我尝试使它们输出数组和dicts,但这导致数据类型错误。 我可以使用1个组件,1个带有viewForRow的数组,但只允许对齐整个字段,而不是字符串的一部分。

以下代码效果很好,并给出了返回label2的正确答案;如果更改为返回label1也是正确的,如何同时显示两者?

   - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *label1;
    {
        label1 = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 150.0f, 130.0f, 60.0f)];

        label1.textAlignment = NSTextAlignmentLeft;

        label1.text = [_firstList objectAtIndex:row];
    }

    UILabel *label2;
    {
    label2 = [[UILabel alloc] initWithFrame:CGRectMake(100.0f, 10.0f, 175.0f, 100.0f)];

      label2.textAlignment = NSTextAlignmentCenter;

        label2.text = [_secondList objectAtIndex:row];
    }
        return label2;
}

1 个答案:

答案 0 :(得分:0)

UIPickerView设置为包含一个组件。

现在假设您的两个数组_firstList_secondList中包含相同数量的对象,您有两个选择:

  1. 使用简单的pickerView:titleForRow:forComponent:方法从两个值返回单个字符串构建:

    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
        return [NSString stringWithFormat:@"%@ - %@", _firstList[row], _secondList[row]];
    }
    

    当然,您可以根据需要格式化两个字符串。这是一个例子。

  2. 像您尝试的那样使用pickerView:viewForRow:forComponent:reusingView:,但返回一个添加了两个标签的视图。

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
        UILabel *label1;
        UILabel *label2;
        if (view) {
            label1 = (UILabel *)[view viewWithTag:1];
            label1 = (UILabel *)[view viewWithTag:2];
        } else {
            view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
            UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 0.0f, 130.0f, 40.0f)];
            label1.tag = 1;
            label1.textAlignment = NSTextAlignmentLeft;
            UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(100.0f, 0.0f, 175.0f, 40.0f)];
            label2.tag = 2;
            label2.textAlignment = NSTextAlignmentCenter;
            [view addSubview:label1];
            [view addSubview:label2];
        }
    
        label1.text = _firstList[row];
        label2.text = _secondList[row];
    
        return view;
    }
    

    请注意这是如何正确使用重用视图的。