просмотр выбора — преобразование единиц измерения

#iphone #objective-c #ios4

#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....
  

}
как я могу сообщить компилятору, какое значение было до выбора?

Комментарии:

1. Ну, это не совсем понятно .. по крайней мере, для меня ..:(

2. @mattia все еще не понял

3. ОК… позвольте мне попробовать еще раз. Значение по умолчанию — литры. Например, пользователь вводит в текстовое поле 1000 литров. Если пользователь нажмет кнопку «Изменить единицу измерения», выбор или таблица действий сдвинутся снизу, предоставляя 3 варианта: литры, галлоны США и имперские галлоны. когда пользователь выбирает галлоны США, значение в текстовом поле изменяется с 1000 литров на 264,17 долларов США.

4. @mattia хорошо, теперь понятно, так в чем проблема, что вы хотите делать, когда панель выбора скользит вверх?

5. когда панель выбора перемещается вверх, пользователь может выбрать 3 разных единицы измерения: литры, галлоны США или имперские галлоны. при выборе одной из единиц измерения появляется метка (рядом с текстовым полем), которая меняется на Ltr, Usg или Ig. До сих пор все работало идеально. Я также хочу взять значение в текстовом поле, чтобы преобразовать его в единицу, выбранную пользователем. я собираюсь опубликовать свой код ….;-)

Ответ №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....
}
  

Комментарии:

1. Мне нужно знать, какая единица измерения была до нового выбора, чтобы произвести правильный расчет. Т. е. …. если это были литры, и пользователь выбрал галлоны США, я должен умножить на 0,264172052, но это были имперские галлоны, и пользователь выбрал галлоны США, я должен умножить на 1,20095042. как я могу это сделать?

2. Назначьте единицы измерения в конце строки в текстовом поле, сначала делегируйте методы. Затем обновите их на основе преобразованных.

Ответ №2:

Когда вы выбираете строку в программе выбора, она вызывает свой метод делегирования pickerView:didSelectRow:inComponent: Здесь вы можете изменить значение вашего текстового поля в зависимости от того, какую строку (литры, галлоны и т.д.) Выбрал пользователь. Пожалуйста, обратитесь к ссылке на класс Apple для делегирования UIPickerView

Ответ №3:

Если я понимаю вашу проблему. Вы хотите перехватить событие, когда пользователь меняет единицы измерения в вашем pickerView, передайте информацию в представление, содержащее текстовое поле, и выполните преобразование.

Итак, вы можете использовать NSNotificationCenter (документация здесь). В вашем окне выбора при изменении значения поместите этот код :

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

В представлении, содержащем UITextField, поместите этот код :

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

Теперь, когда ваш pickerView запускает уведомление, ваш view запускает этот метод :

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

Комментарии:

1. это помогает мне, но мне нужно немного изучить. Проблема в том, что мне нужно сообщить компилятору, какая единица измерения была выбрана пользователем, иначе я не смогу написать код для выполнения вычисления.