2011-04-12 29 views
0

我有一个UI问题。起初,我想有2个采购员来填充2个不同的标签。问题是在ui上使用2个拾取器会占用窗口上的所有空间,并且无法调整拾取器的大小。使用UI Picker到控制器2不同标签

我意识到,因为我在每个拾取器中使用相同的数据,所以我应该能够使用一个拾取器控件逃脱。除非控件的焦点没有正确完成,否则对用户来说会有点困惑。

我希望它的工作有点像在键盘中出现在文本框中。

所以我有一个简单的用户界面

获取数据1:Textbox1的 获取数据2:TextBox2中

挑选器

当用户点击里面TextBox1中选取器出现,而不是代替键盘和使用选择器中的选定数据填充文本框。对于textbox2也是如此。

有人可以给我一个这样做可能完成的样本,还是更好的方法来处理这个问题?你们如何处理在同一窗口上必须有2个下拉菜单?

回答

3

如果您的文本不是太长,则带有两个组件和两个标签(或文本框)的选取器是一个很好的解决方案。

编辑补充

下面是与我一起翻飞两个分量的选择器。

UIPickerView with two components

进一步编辑添加

下面是一些代码来告诉你它是如何做:

设置组件

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 2; 
} 

搭建行

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    if (component == 0) { 
     return [array1 count]; 
    } else { 
     return [array2 count]; 
    } 
} 

基于拾取

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    if (component == 0) { 
     label1.text = [array1 objectAtIndex:row]; 
    } else { 
     label2.text = [array2 objectAtIndex:row]; 
    } 
} 
+0

你可以有一个选择器2种不同成分的变化对行

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) { return [array1 objectAtIndex:row]; } else { return [array2 objectAtIndex:row]; } } 

更改标签提供的数据?你能告诉我一个侧面的样本A填充标签1和B侧填充标签2吗? – 2011-04-12 02:05:37

+0

@马特 - 你能告诉我这个来源吗?我不知道你可以这样做。你也可以在第二个中间添加第三个轮子,它只是一个“ - ”,那个轮子不会移动,所以你的例子中的选择线将读取Banana-Monkey。感谢您也对我进行展示 – 2011-04-12 02:23:34

+0

@Nick发布了一些代码。添加中间连字符需要(a)返回3给'numberOfComponentsInPickerView'; (b)修改'numberOfComponentsInPickerView'从组件1返回array1的值,组件1返回'@“ - ”',返回'titleForRow'中组件2的值2。 (c)修改'didSelectRow'以基于'component == 0'和'component == 2'值更改标签;和(d)实现'UIPickerViewDelegate'方法'pickerView:widthForComponent:'方法来调整组件的大小(可能是150,20或150等等)。 – 2011-04-12 02:36:58