【问题标题】:picker view - units conversion选择器视图 - 单位转换
【发布时间】:2011-05-09 10:40:26
【问题描述】:

我正在开发一个带有从底部滑动的选择器视图(如操作表)的应用程序。我需要转换 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....

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

【问题讨论】:

  • 嗯,不清楚..至少对我来说..:(
  • @mattia 还是不明白
  • 好的...让我再试一次。默认值为升。例如,用户在文本字段中插入 1000 升。如果用户按下“更改单位”按钮,选择器或操作表将从底部滑出,提供 3 个选项:升、美制加仑和英制加仑。当用户选择 us 加仑时,文本字段中的值从 1000 L 变为 264.17 usg。
  • @mattia ok now it is clear,so what is the problem ,what you want to do when the picker slides up?
  • when the picker slides up the user can select 3 different units: Litres, Us gallons or Imperial gallons.选择其中一个单位时,有一个标签(在文本字段旁边),该标签将变为LTR,USG或IG。到目前为止,一切都很完美。我还想将文本字段中的值转换为用户选择的单位。我要发布我的代码....;-)

标签: iphone objective-c ios4


【解决方案1】:

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

- (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....
}

【讨论】:

  • 我需要知道哪个是新选择之前的单位才能进行正确的计算。即....如果它是升并且用户选择了 usgallons 我必须乘以 0.264172052 但它是英制加仑并且用户选择 usgallons 我必须乘以 1.20095042。我该怎么做?
  • 最初在文本字段委托方法中将单位分配到字符串的末尾。然后根据转换后的更新它们。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果我了解您的问题。当用户更改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
    }
    

    【讨论】:

    • 这对我有帮助,但我需要学习一点。问题是我需要在用户选择之前告诉编译器哪个是单位,否则我无法编写代码来进行计算。
    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多