#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. это помогает мне, но мне нужно немного изучить. Проблема в том, что мне нужно сообщить компилятору, какая единица измерения была выбрана пользователем, иначе я не смогу написать код для выполнения вычисления.