选择器视图 - 单位转换

时间:2011-05-09 10:40:26

标签: iphone objective-c ios4

我正在开发一个带有从底部滑动的选择器视图的应用程序(如操作表)。我需要转换3个单位(升,加仑和英制加仑)。该值取自文本字段,但我不知道如何告诉编译器从哪个单元开始。 (即...用户在文本字段中插入值,但如果他更改单位(usg或ig),则文本字段中的值会相应更改。

这是数组:

  NSMutableArray *weightArray = [[NSMutableArray alloc] initWithObjects:@"", @"Ltr",@"Usg",@"Ig",
                               nil];
self.weightPickerViewArray = weightArray;
[weightArray release];`

这是选择器:

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
if (row == 1) {
    labelVolume.text = [weightPickerViewArray objectAtIndex:row];

  //more code here....

}else if (row == 2){
    labelVolume.text = [weightPickerViewArray objectAtIndex:row];

    //more code here....
}else if (row == 3){
    labelVolume.text = [weightPickerViewArray objectAtIndex:row];

    //more code here....

} 如何判断编译器选择之前的值是什么?

3 个答案:

答案 0 :(得分:0)

当你在选择器中选择一行时,它调用它的委托方法pickerView:didSelectRow:inComponent: 在这里,您可以根据用户选择的行(升,加仑等)更改文本字段的值。 请参阅UIPickerView委托的苹果课程参考

答案 1 :(得分:0)

如果我理解你的问题。当用户在pickerView中更改单位时,您希望捕获事件,将信息传递给包含文本字段的视图并执行转换。

因此您可以使用NSNotificationCenter (documentation here)。在您的pickerView中,当值更改时,请输入以下代码:

[[NSNotificationCenter defaultCenter] postNotificationName:@"unitValueChange" object:@"litres"];

在包含UITextField的视图中输入以下代码:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethodToExecute:) name:@"unitValueChange" object:self];

现在,当您的PickerView启动通知时,您的视图会启动此方法:

-(void)myMethodToExecute:(NSNotification *)notif{
NSString *myUnitSelected = notif.object
}

我希望我帮助过你。

答案 2 :(得分:0)

添加一个文本,指明字符串末尾的单位。

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
if (row == 1) {
    NSString *initalValue = labelVolume.text;
    // Do your calculations here based on unit
    NSString *updatedValue = urNewValue;
    labelVolume.text = updatedValue;

  //more code here....

}else if (row == 2){
NSString *initalValue = labelVolume.text;
    // Do your calculations here based on unit
    NSString *updatedValue = urNewValue;
    labelVolume.text = updatedValue;


    //more code here....
}else if (row == 3){
NSString *initalValue = labelVolume.text;
    // Do your calculations here based on unit
    NSString *updatedValue = urNewValue;
    labelVolume.text = updatedValue;


    //more code here....
}
相关问题