From db1e8ad4138cb90efdb123a757fc946c000a8c98 Mon Sep 17 00:00:00 2001 From: anka Date: Wed, 23 Jul 2014 11:10:16 +0200 Subject: [PATCH 1/3] Support multiple components within picker view --- MMPickerView/MMPickerView.h | 7 ++ MMPickerView/MMPickerView.m | 168 +++++++++++++++++++++++++----------- 2 files changed, 123 insertions(+), 52 deletions(-) diff --git a/MMPickerView/MMPickerView.h b/MMPickerView/MMPickerView.h index abbf7c1..c668ed7 100644 --- a/MMPickerView/MMPickerView.h +++ b/MMPickerView/MMPickerView.h @@ -32,6 +32,13 @@ extern NSString * const MMshowsSelectionIndicator; objectToStringConverter: (NSString *(^)(id object))converter completion: (void(^)(id selectedObject))completion; +// Provides a picker with multiple comonents ++(void)showPickerViewInView: (UIView *)view + withArrays: (NSArray *)arrays + withComponentSizes: (NSArray *)sizes + withOptions: (NSDictionary *)options + completion: (void (^)(NSArray* selectedComponents))completion; + +(void)dismissWithCompletion: (void(^)(NSString *))completion; @end diff --git a/MMPickerView/MMPickerView.m b/MMPickerView/MMPickerView.m index 0986641..e21466a 100644 --- a/MMPickerView/MMPickerView.m +++ b/MMPickerView/MMPickerView.m @@ -32,12 +32,14 @@ @interface MMPickerView () @property (nonatomic, strong) UIButton *pickerDoneButton; @property (nonatomic, strong) UIPickerView *pickerView; @property (nonatomic, strong) NSArray *pickerViewArray; +@property (nonatomic, strong) NSArray *pickerViewComponentSizes; @property (nonatomic, strong) UIColor *pickerViewTextColor; @property (nonatomic, strong) UIFont *pickerViewFont; @property (nonatomic, assign) CGFloat yValueFromTop; @property (nonatomic, assign) NSInteger pickerViewTextAlignment; @property (nonatomic, assign) BOOL pickerViewShowsSelectionIndicator; -@property (copy) void (^onDismissCompletion)(NSString *); +@property (nonatomic, assign) BOOL multidimensional; +@property (copy) void (^onDismissCompletion)(id); @property (copy) NSString *(^objectToStringConverter)(id object); @end @@ -63,6 +65,8 @@ +(void)showPickerViewInView:(UIView *)view [[self sharedView] initializePickerViewInView:view withArray:strings + withComponentSizes:nil + isMultidimensional:NO withOptions:options]; [[self sharedView] setPickerHidden:NO callBack:nil]; @@ -81,24 +85,45 @@ +(void)showPickerViewInView:(UIView *)view [self sharedView].onDismissCompletion = completion; [[self sharedView] initializePickerViewInView:view withArray:objects + withComponentSizes:nil + isMultidimensional:NO withOptions:options]; [[self sharedView] setPickerHidden:NO callBack:nil]; [view addSubview:[self sharedView]]; } ++(void)showPickerViewInView: (UIView *)view + withArrays: (NSArray *)arrays + withComponentSizes: (NSArray *)sizes + withOptions: (NSDictionary *)options + completion: (void (^)(NSArray* selectedComponents))completion{ + + [[self sharedView] initializePickerViewInView:view + withArray:arrays + withComponentSizes:sizes + isMultidimensional:YES + withOptions:options]; + + [[self sharedView] setPickerHidden:NO callBack:nil]; + [self sharedView].onDismissCompletion = completion; + [view addSubview:[self sharedView]]; + +} + + #pragma mark - Dismiss Methods +(void)dismissWithCompletion:(void (^)(NSString *))completion{ - [[self sharedView] setPickerHidden:YES callBack:completion]; + [[self sharedView] setPickerHidden:YES callBack:completion]; } -(void)dismiss{ - [MMPickerView dismissWithCompletion:self.onDismissCompletion]; + [MMPickerView dismissWithCompletion:self.onDismissCompletion]; } +(void)removePickerView{ - [[self sharedView] removeFromSuperview]; + [[self sharedView] removeFromSuperview]; } #pragma mark - Show/hide PickerView methods @@ -131,17 +156,41 @@ -(void)setPickerHidden: (BOOL)hidden -(void)initializePickerViewInView: (UIView *)view withArray: (NSArray *)array + withComponentSizes: (NSArray *)sizes + isMultidimensional: (BOOL) multidemsional withOptions: (NSDictionary *)options { _pickerViewArray = array; + _multidimensional = multidemsional; + _pickerViewComponentSizes = sizes; + + // get number of components + NSInteger numberComponents = multidemsional ? array.count : 1; + + // if no component sizes were given just calculate them + if(_pickerViewComponentSizes == nil || numberComponents != _pickerViewComponentSizes.count) + { + _pickerViewComponentSizes = [[NSMutableArray alloc] initWithCapacity:numberComponents]; + for(int i=0; i Date: Wed, 23 Jul 2014 11:10:36 +0200 Subject: [PATCH 2/3] Update demo app to show multiple components example --- Demo/Classes/MMTestViewController.h | 2 +- Demo/Classes/MMTestViewController.m | 291 ++++++++++++---------- Demo/MMTestViewController.xib | 370 +++++++--------------------- 3 files changed, 246 insertions(+), 417 deletions(-) diff --git a/Demo/Classes/MMTestViewController.h b/Demo/Classes/MMTestViewController.h index 85f8df9..c58f8b1 100644 --- a/Demo/Classes/MMTestViewController.h +++ b/Demo/Classes/MMTestViewController.h @@ -10,7 +10,7 @@ #import "MMPickerView.h" @interface MMTestViewController : UIViewController -- (IBAction)showPickerViewButtonPressed:(id)sender; + @property (weak, nonatomic) IBOutlet UILabel *label; @end diff --git a/Demo/Classes/MMTestViewController.m b/Demo/Classes/MMTestViewController.m index 7432c73..cd3c33b 100644 --- a/Demo/Classes/MMTestViewController.m +++ b/Demo/Classes/MMTestViewController.m @@ -33,142 +33,169 @@ - (void)viewDidLoad } +- (IBAction)showSimplePickerView:(id)sender { + /* + Options: + + MMbackgroundColor - UIColor + MMtextColor - UIColor + MMtoolbarColor - UIColor + MMbuttonColor - UIColor + MMfont - UIFont + MMvalueY - NSInteger + MMselectedObject - An Object ex: a string + MMtoolbarBackgroundImage - UIImage + MMtextAlignment - NSNumber (@0 - Left, @1 - Center, @2 - Right) + + *************** + DON'T FORGET TO ONLY UNCOMMENT ONE EXAMPLE AT A TIME, OTHERWISE YOU WILL HAVE SEVERAL PICKERVIEWS AT THE SAME TIME. + JUST SAYIN' :-) + *************** + */ + + + /* + //Simple PickerView with array of strings + NSArray *strings = @[@"This", @"is", @"just", @"an array", @"of strings."]; + + [MMPickerView showPickerViewInView:self.view + withStrings:strings + withOptions:nil + completion:^(NSString *selectedString) { + //selectedString is the return value which you can use as you wish + self.label.text = selectedString; + }]; + */ + + + /* + + //PickerView with Custom look, with array of strings + UIFont *customFont = [UIFont fontWithName:@"Palatino-Bold" size:19.0]; + NSDictionary *options = @{MMbackgroundColor:[UIColor clearColor], + MMtextColor: [UIColor colorWithRed:0.063 green:0.180 blue:0.216 alpha:1], + MMtoolbarColor:[UIColor colorWithRed:0.169 green:0.733 blue:0.847 alpha:1], + MMbuttonColor:[UIColor colorWithRed:0.969 green:0.553 blue:0.247 alpha:1], + MMfont: customFont, + MMvalueY: @5}; + + [MMPickerView showPickerViewInView:self.view + withStrings:_stringsArray + withOptions:options + completion:^(NSString *selectedString) { + //selectedString is the return value which you can use as you wish + self.label.text = selectedString; + }]; + */ + + + /* + //PickerView with selectedValue functionality, and customized look, with array of strings + [MMPickerView showPickerViewInView:self.view + withStrings:_stringsArray + withOptions:@{MMbackgroundColor: [UIColor whiteColor], + MMtextColor: [UIColor blackColor], + MMtoolbarColor: [UIColor whiteColor], + MMbuttonColor: [UIColor blueColor], + MMfont: [UIFont systemFontOfSize:18], + MMvalueY: @3, + MMselectedObject:_selectedString, + MMtextAlignment:@1} + completion:^(NSString *selectedString) { + + _label.text = selectedString; + _selectedString = selectedString; + }]; + */ + + + /* + //This one looks nice on iOS 7, but not iOS 6. + //PickerView with selectedValue functionality, and customized look, with array of strings + + [MMPickerView showPickerViewInView:self.view + withStrings:_stringsArray + withOptions:@{MMbackgroundColor: [UIColor blackColor], + MMtextColor: [UIColor whiteColor], + MMtoolbarColor: [UIColor blackColor], + MMbuttonColor: [UIColor whiteColor], + MMfont: [UIFont systemFontOfSize:18], + MMvalueY: @3, + MMselectedObject:_selectedString} + completion:^(NSString *selectedString) { + + _label.text = selectedString; + _selectedString = selectedString; + }]; + */ + + + + //PickerView using array of objects + NSArray *objects = @[@"This is a mix of objects", @14, @13.3, @"A string", @1]; + + [MMPickerView showPickerViewInView:self.view + withObjects:objects + withOptions:nil + objectToStringConverter:^NSString *(id object) { + return [object description]; + } + completion:^(id selectedObject) { + + _label.text = [selectedObject description]; + }]; + + + + /* + //PickerView using array of objects, with selectedObject functionality + [MMPickerView showPickerViewInView:self.view + withObjects:_objectsArray + withOptions:@{MMselectedObject:_selectedObject} + objectToStringConverter:^NSString *(id object) { + return [object description]; + } + completion:^(id selectedObject) { + _label.text = [selectedObject description]; + _selectedObject = selectedObject; + }]; + */ +} -- (IBAction)showPickerViewButtonPressed:(id)sender { - - /* - Options: - - MMbackgroundColor - UIColor - MMtextColor - UIColor - MMtoolbarColor - UIColor - MMbuttonColor - UIColor - MMfont - UIFont - MMvalueY - NSInteger - MMselectedObject - An Object ex: a string - MMtoolbarBackgroundImage - UIImage - MMtextAlignment - NSNumber (@0 - Left, @1 - Center, @2 - Right) - - *************** - DON'T FORGET TO ONLY UNCOMMENT ONE EXAMPLE AT A TIME, OTHERWISE YOU WILL HAVE SEVERAL PICKERVIEWS AT THE SAME TIME. - JUST SAYIN' :-) - *************** - */ - - - /* - //Simple PickerView with array of strings - NSArray *strings = @[@"This", @"is", @"just", @"an array", @"of strings."]; - - [MMPickerView showPickerViewInView:self.view - withStrings:strings - withOptions:nil - completion:^(NSString *selectedString) { - //selectedString is the return value which you can use as you wish - self.label.text = selectedString; - }]; - */ - - - /* - - //PickerView with Custom look, with array of strings - UIFont *customFont = [UIFont fontWithName:@"Palatino-Bold" size:19.0]; - NSDictionary *options = @{MMbackgroundColor:[UIColor clearColor], - MMtextColor: [UIColor colorWithRed:0.063 green:0.180 blue:0.216 alpha:1], - MMtoolbarColor:[UIColor colorWithRed:0.169 green:0.733 blue:0.847 alpha:1], - MMbuttonColor:[UIColor colorWithRed:0.969 green:0.553 blue:0.247 alpha:1], - MMfont: customFont, - MMvalueY: @5}; - - [MMPickerView showPickerViewInView:self.view - withStrings:_stringsArray - withOptions:options - completion:^(NSString *selectedString) { - //selectedString is the return value which you can use as you wish - self.label.text = selectedString; - }]; - */ - - - - //PickerView with selectedValue functionality, and customized look, with array of strings - [MMPickerView showPickerViewInView:self.view - withStrings:_stringsArray - withOptions:@{MMbackgroundColor: [UIColor whiteColor], - MMtextColor: [UIColor blackColor], - MMtoolbarColor: [UIColor whiteColor], - MMbuttonColor: [UIColor blueColor], - MMfont: [UIFont systemFontOfSize:18], - MMvalueY: @3, - MMselectedObject:_selectedString, - MMtextAlignment:@1} - completion:^(NSString *selectedString) { - - _label.text = selectedString; - _selectedString = selectedString; - }]; - - - - /* - //This one looks nice on iOS 7, but not iOS 6. - //PickerView with selectedValue functionality, and customized look, with array of strings - - [MMPickerView showPickerViewInView:self.view - withStrings:_stringsArray - withOptions:@{MMbackgroundColor: [UIColor blackColor], - MMtextColor: [UIColor whiteColor], - MMtoolbarColor: [UIColor blackColor], - MMbuttonColor: [UIColor whiteColor], - MMfont: [UIFont systemFontOfSize:18], - MMvalueY: @3, - MMselectedObject:_selectedString} - completion:^(NSString *selectedString) { - - _label.text = selectedString; - _selectedString = selectedString; - }]; - */ - - - - /* - //PickerView using array of objects - NSArray *objects = @[@"This is a mix of objects", @14, @13.3, @"A string", @1]; - - [MMPickerView showPickerViewInView:self.view - withObjects:objects - withOptions:nil - objectToStringConverter:^NSString *(id object) { - return [object description]; - } - completion:^(id selectedObject) { - - _label.text = [selectedObject description]; - }]; - */ - - - - /* - //PickerView using array of objects, with selectedObject functionality - [MMPickerView showPickerViewInView:self.view - withObjects:_objectsArray - withOptions:@{MMselectedObject:_selectedObject} - objectToStringConverter:^NSString *(id object) { - return [object description]; - } - completion:^(id selectedObject) { - _label.text = [selectedObject description]; - _selectedObject = selectedObject; - }]; - */ - - +- (IBAction)showMultiComponentPickerView:(id)sender { + NSArray *components = @[@[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"]]; + NSArray *selected = @[@"1", @"2", @"3", @"1"]; + + //PickerView using array of objects, with selectedObject functionality + [MMPickerView showPickerViewInView:self.view + withArrays:components + withComponentSizes:nil + withOptions:@{MMselectedObject: selected} + completion:^(NSArray *selectedComponents) { + NSString *str = [selectedComponents componentsJoinedByString:@""]; + self.label.text = str; + } + ]; } +- (IBAction)showMultiComponentWithSizesPickerView:(id)sender { + NSArray *components = @[@[@""], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@""]]; + NSArray *selected = @[@"", @"1", @"2", @"3", @"1", @"",]; + + NSArray *sizes = @[@(100),@(30),@(30),@(30),@(30),@(100)]; + + //PickerView using array of objects, with selectedObject functionality + [MMPickerView showPickerViewInView:self.view + withArrays:components + withComponentSizes:sizes + withOptions:@{MMselectedObject: selected} + completion:^(NSArray *selectedComponents) { + NSString *str = [selectedComponents componentsJoinedByString:@""]; + self.label.text = str; + } + ]; +} diff --git a/Demo/MMTestViewController.xib b/Demo/MMTestViewController.xib index db1437b..69f178d 100644 --- a/Demo/MMTestViewController.xib +++ b/Demo/MMTestViewController.xib @@ -1,284 +1,86 @@ - - - - 1552 - 12E55 - 3084 - 1187.39 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUILabel - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 1298 - - - - 1316 - - {{96, 88}, {129, 46}} - - - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Show PickerView - - 3 - MQA - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - 1316 - - {{20, 37}, {280, 16}} - - - - NO - YES - 7 - NO - IBCocoaTouchFramework - Label - - 1 - MCAwIDAAA - darkTextColor - - - 0 - 1 - - 1 - 17 - - - Helvetica - 17 - 16 - - NO - - - - {{0, 20}, {320, 548}} - - - - - 3 - MQA - - 2 - - - - - IBUIScreenMetrics - - YES - - - - - - {320, 568} - {568, 320} - - - IBCocoaTouchFramework - Retina 4 Full Screen - 2 - - IBCocoaTouchFramework - - - - NO - - - - label - - - - 13 - - - - view - - - - 10 - - - - showPickerViewButtonPressed: - - - 7 - - 11 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 1 - - - - - - - - - 4 - - - - - 12 - - - - - - - MMTestViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - - - - - - - MMTestViewController - UIViewController - - showPickerViewButtonPressed: - id - - - showPickerViewButtonPressed: - - showPickerViewButtonPressed: - id - - - - label - UILabel - - - label - - label - UILabel - - - - IBProjectSource - ./Classes/MMTestViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 2083 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e0e1526ccdc2bb0dae46b1a33673e7fa50854cab Mon Sep 17 00:00:00 2001 From: anka Date: Wed, 23 Jul 2014 11:20:46 +0200 Subject: [PATCH 3/3] Updated README --- Demo/example_multiple_components.png | Bin 0 -> 10793 bytes README.md | 32 +++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 Demo/example_multiple_components.png diff --git a/Demo/example_multiple_components.png b/Demo/example_multiple_components.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce6a2a24e2e9634bf99f34f30e17f29f191a406 GIT binary patch literal 10793 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 ZB#L9I*B|P3pj ## Installation @@ -48,6 +52,12 @@ You can show the PickerView: withOptions: (NSDictionary *)options objectToStringConverter: (NSString *(^)(id object))converter completion: (void(^)(id selectedObject))completion; + ++(void)showPickerViewInView: (UIView *)view + withArrays: (NSArray *)arrays + withComponentSizes: (NSArray *)sizes + withOptions: (NSDictionary *)options + completion: (void (^)(NSArray* selectedComponents))completion; ``` @@ -85,6 +95,24 @@ You can show the PickerView: }]; ``` +#### Example 3 - Show with multiple components. +```objective-c + + NSArray *components = @[@[@""], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@"1", @"2", @"3"], @[@""]]; + NSArray *selected = @[@"", @"1", @"2", @"3", @"1", @"",]; + NSArray *sizes = @[@(100), @(30), @(30), @(30), @(30), @(100)]; + + //PickerView using array of objects, with selectedObject functionality + [MMPickerView showPickerViewInView:self.view + withArrays:components + withComponentSizes:sizes + withOptions:@{MMselectedObject: selected} + completion:^(NSArray *selectedComponents) { + // interpret the selected components + } + ]; +``` + ### Customizing MMPickerView Both show methods use a `NSDictionary` to set the options of the `MMPickerView`. If you want a native looking PickerView, just `withOptions: nil`. In case of customization, use any of the different properties to customize the PickerView. All of the properties are optional, which means that if you only want to change one thing, like for eg the text color you can do like this, `withOptions: @{MMtextColor: [UIColor redColor]}` @@ -116,7 +144,7 @@ Both show methods use a `NSDictionary` to set the options of the `MMPickerView`. */ ``` -#### Example 3 - Show with an array of strings and with custom colors and custom font. +#### Example 4 - Show with an array of strings and with custom colors and custom font. ```objective-c NSArray *strings = @[@"This", @"is", @"just", @"an array", @"of strings."]; @@ -143,7 +171,7 @@ A useful feature is to let the PickerView select whatever was selected last time -#### Example 4 - Show with an array of strings set selectedValue on PickerView. +#### Example 5 - Show with an array of strings set selectedValue on PickerView. ```objective-c