From 13aa2baf730928f30d03c19746463dc3890dd8aa Mon Sep 17 00:00:00 2001 From: michelevirgilio Date: Mon, 18 Nov 2013 18:01:52 +0100 Subject: [PATCH] Added support to QPickerElement for submit values --- extras/QPickerElement.h | 6 ++++++ extras/QPickerElement.m | 15 +++++++++++++-- extras/QPickerTableViewCell.m | 23 +++++++++++++++++++---- 3 files changed, 38 insertions(+), 6 deletions(-) mode change 100644 => 100755 extras/QPickerElement.h mode change 100644 => 100755 extras/QPickerElement.m mode change 100644 => 100755 extras/QPickerTableViewCell.m diff --git a/extras/QPickerElement.h b/extras/QPickerElement.h old mode 100644 new mode 100755 index 03041134..4aa4a232 --- a/extras/QPickerElement.h +++ b/extras/QPickerElement.h @@ -11,11 +11,17 @@ @property (nonatomic, strong) id valueParser; @property (nonatomic, strong) NSArray *items; +@property (nonatomic, strong) NSArray *itemsValues; @property (nonatomic, readonly) NSArray *selectedIndexes; +@property (nonatomic, strong) id displayValue; +@property (nonatomic, strong) id submitValue; + - (QPickerElement *)initWithTitle:(NSString *)title items:(NSArray *)items value:(id)value; +- (QPickerElement *)initWithTitle:(NSString *)title items:(NSArray *)items itemsValues:(NSArray *) itemsValues value:(id)value; - (void)reloadAllComponents; - (void)reloadComponent:(NSInteger)index; + @end diff --git a/extras/QPickerElement.m b/extras/QPickerElement.m old mode 100644 new mode 100755 index fe3fa576..a433fca4 --- a/extras/QPickerElement.m +++ b/extras/QPickerElement.m @@ -6,11 +6,13 @@ @implementation QPickerElement { @private NSArray *_items; - + NSArray *_itemsValues; UIPickerView *_pickerView; + } @synthesize items = _items; +@synthesize itemsValues = _itemsValues; @synthesize valueParser = _valueParser; - (QPickerElement *)init @@ -30,6 +32,15 @@ - (QPickerElement *)initWithTitle:(NSString *)title items:(NSArray *)items value } return self; } +- (QPickerElement *)initWithTitle:(NSString *)title items:(NSArray *)items itemsValues:(NSArray *)itemsValues value:(id)value +{ + if ((self = [super initWithTitle:title Value:value])) { + _items = items; + _itemsValues = itemsValues; + self.valueParser = [QPickerTabDelimitedStringParser new]; + } + return self; +} - (UITableViewCell *)getCellForTableView:(QuickDialogTableView *)tableView controller:(QuickDialogController *)controller { @@ -51,7 +62,7 @@ - (UITableViewCell *)getCellForTableView:(QuickDialogTableView *)tableView contr - (void)fetchValueIntoObject:(id)obj { if (_key != nil) { - [obj setValue:_value forKey:_key]; + [obj setValue:_submitValue forKey:_key]; } } diff --git a/extras/QPickerTableViewCell.m b/extras/QPickerTableViewCell.m old mode 100644 new mode 100755 index 08bded02..ded65bde --- a/extras/QPickerTableViewCell.m +++ b/extras/QPickerTableViewCell.m @@ -110,14 +110,15 @@ - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row f - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { - self.pickerElement.value = [self getPickerViewValue]; + self.pickerElement.value = self.pickerElement.displayValue = [self getPickerViewValue:false]; + self.pickerElement.submitValue = [self getPickerViewValue:true]; [self prepareForElement:_entryElement inTableView:_quickformTableView]; [self.pickerElement handleEditingChanged]; } #pragma mark - Getting/setting value from UIPickerView -- (id)getPickerViewValue +- (id)getPickerViewValue:(BOOL)submitValue { NSMutableArray *componentsValues = [NSMutableArray array]; @@ -125,7 +126,10 @@ - (id)getPickerViewValue { NSInteger rowIndex = [_pickerView selectedRowInComponent:i]; if (rowIndex >= 0) { - [componentsValues addObject:[self pickerView:_pickerView titleForRow:rowIndex forComponent:i]]; + if (self.pickerElement.itemsValues == nil || !submitValue) + [componentsValues addObject:[self pickerView:_pickerView titleForRow:rowIndex forComponent:i]]; + else + [componentsValues addObject:[self.pickerElement.itemsValues[i] objectAtIndex:rowIndex]]; } else { [componentsValues addObject:[NSNull null]]; } @@ -135,6 +139,8 @@ - (id)getPickerViewValue return [self.pickerElement.valueParser objectFromComponentsValues:componentsValues]; } + + - (void)setPickerViewValue:(id)value { NSArray *componentsValues = [self.pickerElement.valueParser componentsValuesFromObject:value]; @@ -142,7 +148,16 @@ - (void)setPickerViewValue:(id)value for (int componentIndex = 0; componentIndex < componentsValues.count && componentIndex < _pickerView.numberOfComponents; componentIndex++) { id componentValue = [componentsValues objectAtIndex:(NSUInteger) componentIndex]; - NSInteger rowIndex = [[self.pickerElement.items objectAtIndex:componentIndex] indexOfObject:componentValue]; + NSInteger rowIndex = NSNotFound; +// if (self.pickerElement.itemsValues == nil) +// { + rowIndex = [[self.pickerElement.items objectAtIndex:componentIndex] indexOfObject:componentValue]; +// } +// else +// { +// rowIndex = [[self.pickerElement.itemsValues objectAtIndex:componentIndex] indexOfObject:componentValue]; +// } + if (rowIndex != NSNotFound) { [_pickerView selectRow:rowIndex inComponent:componentIndex animated:YES]; }