From 9e069f3a8576cb32ca744e1f46b627cc5dc5ebb7 Mon Sep 17 00:00:00 2001 From: Ric Santos Date: Tue, 24 Sep 2013 08:58:19 +0930 Subject: [PATCH 1/5] Fixed compiler warnings when checking if NSInteger is greater or equal to zero (not necessary) --- .../STSegmentedControl/STSegmentedControl.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m index 4d4ccaf..8cd14c1 100644 --- a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m +++ b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m @@ -259,7 +259,7 @@ - (void)insertSegmentWithObject:(NSObject *)object atIndex:(NSUInteger)index { /* Making sure we don't call out of bounds */ - if(index <= numberOfSegments && index >= 0) + if(index <= numberOfSegments) { [segments insertObject:object atIndex:index]; [self resetSegments]; @@ -270,7 +270,7 @@ - (void)setObject:(NSObject *)object forSegmentAtIndex:(NSUInteger)index { /* Making sure we don't call out of bounds */ - if(index < numberOfSegments && index >= 0) + if(index < numberOfSegments) { [segments replaceObjectAtIndex:index withObject:object]; [self resetSegments]; @@ -292,7 +292,7 @@ - (void)removeSegmentAtIndex:(NSUInteger)index { Making sure we don't call out of bounds If you delete a segment when only having two segments, the control won't be shown anymore */ - if(index < numberOfSegments && index >= 0) + if(index < numberOfSegments) { [segments removeObjectAtIndex:index]; [self resetSegments]; From 0d0ce0cb978256a4c53eca842e82f0f6cca9fcca Mon Sep 17 00:00:00 2001 From: Ric Santos Date: Tue, 24 Sep 2013 08:58:43 +0930 Subject: [PATCH 2/5] Bug fix when setting index programatically. --- STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m index 8cd14c1..5db842e 100644 --- a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m +++ b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m @@ -225,7 +225,7 @@ - (void)segmentTapped:(id)sender { UIButton *button = sender; [self bringSubviewToFront:button]; - if(selectedSegmentIndex != button.tag - 1 || programmaticIndexChange) + if(selectedSegmentIndex != button.tag - 1 || !programmaticIndexChange) { selectedSegmentIndex = button.tag - 1; programmaticIndexChange = NO; From ae3c63a7ef777a8635531e34ebcd5c18ea5a8053 Mon Sep 17 00:00:00 2001 From: Ric Santos Date: Tue, 24 Sep 2013 08:59:56 +0930 Subject: [PATCH 3/5] Fix method signature for setImage to have UIImage parameter type instead of NSString. --- STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.h | 2 +- STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.h mode change 100644 => 100755 STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m diff --git a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.h b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.h old mode 100644 new mode 100755 index 4fb8307..732e25c --- a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.h +++ b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.h @@ -40,7 +40,7 @@ enum { - (void)setTitle:(NSString *)title forSegmentAtIndex:(NSUInteger)index; - (NSString *)titleForSegmentAtIndex:(NSUInteger)index; -- (void)setImage:(NSString *)image forSegmentAtIndex:(NSUInteger)index; +- (void)setImage:(UIImage *)image forSegmentAtIndex:(NSUInteger)index; - (UIImage *)imageForSegmentAtIndex:(NSUInteger)index; @property (nonatomic, retain) NSMutableArray *segments; // at least two (2) NSStrings are needed for a STSegmentedControl to be displayed diff --git a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m old mode 100644 new mode 100755 index 5db842e..04b653d --- a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m +++ b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m @@ -310,7 +310,7 @@ - (void)setTitle:(NSString *)title forSegmentAtIndex:(NSUInteger)index { [self setObject:title forSegmentAtIndex:index]; } -- (void)setImage:(NSString *)image forSegmentAtIndex:(NSUInteger)index { +- (void)setImage:(UIImage *)image forSegmentAtIndex:(NSUInteger)index { [self setObject:image forSegmentAtIndex:index]; } From c935d126249d0a4ae645328a4009fc89384110dd Mon Sep 17 00:00:00 2001 From: Ric Santos Date: Tue, 24 Sep 2013 09:54:43 +0930 Subject: [PATCH 4/5] Bug fix when setting index programatically. --- .../STSegmentedControl/STSegmentedControl.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m index 04b653d..14c3206 100755 --- a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m +++ b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m @@ -225,12 +225,13 @@ - (void)segmentTapped:(id)sender { UIButton *button = sender; [self bringSubviewToFront:button]; - if(selectedSegmentIndex != button.tag - 1 || !programmaticIndexChange) + if(selectedSegmentIndex != button.tag - 1 && !programmaticIndexChange) { selectedSegmentIndex = button.tag - 1; - programmaticIndexChange = NO; [self sendActionsForControlEvents:UIControlEventValueChanged]; } + + programmaticIndexChange = NO; /* Give the tapped segment the selected look From 3a1c91c2ccad5bb40f9f6281c615fc8829d411fc Mon Sep 17 00:00:00 2001 From: Ric Santos Date: Tue, 24 Sep 2013 10:46:59 +0930 Subject: [PATCH 5/5] Implemented size to fit (not tested for images). --- .../STSegmentedControl/STSegmentedControl.m | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m index 14c3206..f166a08 100755 --- a/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m +++ b/STSegmentedControlDemo/STSegmentedControl/STSegmentedControl.m @@ -280,6 +280,30 @@ - (void)setObject:(NSObject *)object forSegmentAtIndex:(NSUInteger)index { #pragma mark - +- (void)sizeToFit { + float width = 0; + for (id item in segments) { + if ([item isKindOfClass:[NSString class]]) { + NSString *string = (NSString *)item; + CGSize size = [string sizeWithFont:[UIFont boldSystemFontOfSize:12]]; + width += size.width + 20; + } + else if ([item isKindOfClass:[UIImage class]]) { + UIImage *image = (UIImage *)item; +#warning untested + width += image.size.width; + } + } + + if (width > 0) { + CGRect newFrame = self.frame; + newFrame.size.width = width; + self.frame = newFrame; + } +} + +#pragma mark - + - (void)insertSegmentWithTitle:(NSString *)title atIndex:(NSUInteger)index { [self insertSegmentWithObject:title atIndex:index]; }