SVSegmentedControl is a customizable UIControl
class that mimics UISegmentedControl but that looks like an UISwitch.
- Drag the
SVSegmentedControl/SVSegmentedControl
folder into your project. - Add the QuartzCore framework to your project.
(see sample Xcode project in /Demo
)
In its simplest form, this is how you create an SVSegmentedControl instance:
segmentedControl = [[SVSegmentedControl alloc] initWithSectionTitles:[NSArray arrayWithObjects:@"Section 1", @"Section 2", nil]]; segmentedControl.changeHandler = ^(NSUInteger newIndex) { // respond to index change }; [self.view addSubview:segmentedControl]; [segmentedControl release];
This is how you create it with images:
segmentedControl = [[SVSegmentedControl alloc] initWithSectionImages:[NSArray arrayWithObjects:[UIImage imageNamed:@"image_name.png"],[UIImage imageNamed:@"image_name.png"],nil]];
You’re highly encouraged to position it using its center
property:
segmentedControl.center = CGPointMake(160, 70);
SVSegmentedControl can be customized with the following properties:
@property (nonatomic, readwrite) NSUInteger selectedIndex; // default is 0 @property (nonatomic, readwrite) BOOL animateToInitialSelection; // default is NO @property (nonatomic, readwrite) BOOL crossFadeLabelsOnDrag; // default is NO @property (nonatomic, strong) NSMutableArray *selectedImagesArray; //default is regular images @property (nonatomic, retain) UIColor *tintColor; // default is [UIColor grayColor] @property (nonatomic, retain) UIImage *backgroundImage; // default is nil @property (nonatomic, readwrite) CGFloat height; // default is 32.0 @property (nonatomic, readwrite) UIEdgeInsets thumbEdgeInset; // default is UIEdgeInsetsMake(2, 2, 3, 2) @property (nonatomic, readwrite) UIEdgeInsets titleEdgeInsets; // default is UIEdgeInsetsMake(0, 10, 0, 10) @property (nonatomic, readwrite) CGFloat cornerRadius; // default is 4.0 @property (nonatomic, retain) UIFont *font; // default is [UIFont boldSystemFontOfSize:15] @property (nonatomic, retain) UIColor *textColor; // default is [UIColor grayColor]; @property (nonatomic, retain) UIColor *textShadowColor; // default is [UIColor blackColor] @property (nonatomic, readwrite) CGSize textShadowOffset; // default is CGSizeMake(0, -1)
Its thumb (SVSegmentedThumb
) can be customized as well:
@property (nonatomic, retain) UIImage *backgroundImage; // default is nil; @property (nonatomic, retain) UIImage *highlightedBackgroundImage; // default is nil; @property (nonatomic, retain) UIColor *tintColor; // default is [UIColor grayColor] @property (nonatomic, assign) UIColor *textColor; // default is [UIColor whiteColor] @property (nonatomic, assign) UIColor *textShadowColor; // default is [UIColor blackColor] @property (nonatomic, readwrite) CGSize textShadowOffset; // default is CGSizeMake(0, -1) @property (nonatomic, readwrite) BOOL shouldCastShadow; // default is YES (NO when backgroundImage is set)
Note: to customize the thumb’s appearance, you’ll have to set the properties through SVSegmentedControl’s thumb
property. For instance, setting the thumb’s tintColor
is done with:
segmentedControl.thumb.tintColor = someColor;
You can respond to value changes using a block handler:
segmentedControl.changeHandler = ^(NSUInteger newIndex) { // respond to index change };
If you haven’t fallen in love with blocks yet, you can still use the classic UIControl method:
[mySegmentedControl addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
Providing an action method ending with a semicolon, the sender object is therefore made accessible:
- (void)segmentedControlChangedValue:(SVSegmentedControl*)segmentedControl { NSLog(@"segmentedControl did select index %i", segmentedControl.selectedIndex); }
SVSegmentedControl is brought to you by Niv Gutherz (Originally by Sam Vermette).