第一条评论,所以我希望我这样做。
我和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;
}
答案 0 :(得分:0)
将UIPickerView
设置为包含一个组件。
现在假设您的两个数组_firstList
和_secondList
中包含相同数量的对象,您有两个选择:
使用简单的pickerView:titleForRow:forComponent:
方法从两个值返回单个字符串构建:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [NSString stringWithFormat:@"%@ - %@", _firstList[row], _secondList[row]];
}
当然,您可以根据需要格式化两个字符串。这是一个例子。
像您尝试的那样使用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;
}
请注意这是如何正确使用重用视图的。