在3个UIPickers的uitextfield中输入分数?

时间:2011-05-23 15:32:54

标签: objective-c xcode keyboard uitextfield uipickerview

所以我打算做的不是输入小数,而是希望能够在文本字段中输入整数和分数。或者从UIPicker中选择它们。

示例:英尺,英寸,分数。(2 - 4 1/2)。

实现这一目标的最佳方法是什么?请在答案中详细说明。提前谢谢!

更新:好的可能需要更多细节。

我将使用选择器,并希望显示如下5行:

<Ft>    <In>
0 0  S  0 0  S  1/16
1 1  P  1 1  P  1/8
2 2  A  2 2  A  3/16
3 3  C  3 3  C  1/4 
4 4  E  4 4  E  5/16 
ect...all the way to 9, and to 15/16 for the fractions. (Note the space between Ft and Inches and title for row).

好的,所以我能够让3个采摘者在屏幕上显示我想要的东西,我最大的问题是让它在文本字段中正确显示。所以上面的例子如何,ft有它自己的选择器,英寸有它自己,分数有它自己,你怎么能让所有三个在一个文本字段中显示为“00ft 00 0/0in”? 更新:下面的代码是正确的,请确保为包含选择器的UIView创建一个IBOutlet,并将其连接到IB中。

.m文件

feetArray = [[NSMutableArray alloc] init];
for(int feet = 0; feet <= 9; feet ++){ 
    NSString *feetString = [NSString stringWithFormat:@"%d%", feet];
    [feetArray addObject:feetString]; // Add the string.
}    

inchArray = [[NSMutableArray alloc] init];
for(int inch = 0; inch <= 12; inch ++){ 
    NSString *inchString = [NSString stringWithFormat:@"%d%", inch];
    [inchArray addObject:inchString]; // Add the string.
}

fractionArray = [[NSMutableArray alloc] init];
for(int frac = 0; frac <= 15; frac ++){ 
    NSString *fractionString = [NSString stringWithFormat:@"%d/16", frac];
    [fractionArray addObject:fractionString]; // Add the string.
}

}


//How many rows in each Picker.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
if (pickerView.tag == 1) {
    return 2;
}
if (pickerView.tag == 2) {
    return 2;
}

return 1;
}

//Selects array for each picker.
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

if (pickerView.tag == 1) {

    return [feetArray count];
}
if (pickerView.tag == 2) {

    return [inchArray count];
}

return [fractionArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

if (pickerView.tag == 1) {
    return [feetArray objectAtIndex:row];
}
if (pickerView.tag == 2) {
    return [inchArray objectAtIndex:row];
}
    return [fractionArray objectAtIndex:row];
}

//Formats the textfield based on the pickers.
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

NSString *result = [feetArray objectAtIndex:[feetPicker selectedRowInComponent:0]];

result = [result stringByAppendingFormat:@"%@ft", [feetArray objectAtIndex:[feetPicker selectedRowInComponent:1]]];
result = [result stringByAppendingFormat:@" %@", [inchArray objectAtIndex:[inchesPicker selectedRowInComponent:0]]];
result = [result stringByAppendingFormat:@"%@", [inchArray objectAtIndex:[inchesPicker selectedRowInComponent:1]]];
result = [result stringByAppendingFormat:@" %@in", [fractionArray objectAtIndex:[fractionPicker selectedRowInComponent:0]]];

RiseTextField.text = result;
}

3 个答案:

答案 0 :(得分:3)

通过将UIPickerView对象设置为inputView,您无需担心文本输入。点击文本字段会调出选择器并使输入受限制,就像您想要的那样。您可以直接在控制器中进行子类化或设置它们。我将其设置为子类here。它是我理解它所需要的粗略实现。你可以看看它是否有帮助。

答案 1 :(得分:2)

我建议使用选择器,然后输入分数会更容易,并且会阻止输入不正确的分数。

有两种方法可以将分数放入UIPicker中,使用UIPicker委托的pickerView:titleForRow:forComponent:方法将分数作为字符串给出。你可以使用UTF8分数字符,如¼这个函数。

如果没有给予足够的灵活性。您可以使用代理的pickerView:viewForRow:forComponent:reusingView:方法制作分数图像并将图像放入选择器。

文档将为您提供大量信息!祝你好运!

答案 2 :(得分:0)

听起来你想要像带有多个轮子的日期选择器这样的东西来选择距离的每个部分。不幸的是,没有办法做到这一点。你有两个选择。简单的选择是使用几个彼此相邻的拾取器。它看起来不一样但很简单。更复杂的选择是使用UIScrollViews构建一个,并将其设置为您想要的样式。