SVSegmentedControl
SVSegmentedControl is a customizable UI control class that mimics UISegmentedControl but that looks like an UISwitch.
Installation
- Drag the
SVSegmentedControl/SVSegmentedControl
folder into your project. - Add the QuartzCore framework to your project.
Usage
(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.delegate = self; [self.view addSubview:segmentedControl]; [segmentedControl release];
You’re highly encouraged to position it using its center
property:
segmentedControl.center = CGPointMake(160, 70);
Customization
SVSegmentedControl can be customized with the following properties:
@property (nonatomic, retain) UIFont *font; // default is [UIFont boldSystemFontOfSize:15] @property (nonatomic, retain) UIColor *textColor; // default is [UIColor grayColor]; @property (nonatomic, retain) UIColor *shadowColor; // default is [UIColor blackColor] @property (nonatomic, readwrite) CGSize shadowOffset; // default is CGSizeMake(0, -1) @property (nonatomic, readwrite) CGFloat segmentPadding; // default is 10.0 @property (nonatomic, readwrite) CGFloat height; // default is 32.0 @property BOOL fadeLabelsBetweenSegments; // default is NO
Its thumb (SVSegmentedThumb
) can be customized as well:
@property (nonatomic, retain) UIColor *tintColor; // default is [UIColor grayColor] @property (nonatomic, retain) UIColor *textColor; // default is [UIColor whiteColor] @property (nonatomic, retain) UIColor *shadowColor; // default is [UIColor blackColor] @property (nonatomic, readwrite) CGSize shadowOffset; // default is CGSizeMake(0, -1)
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;
Responding to value changes
There are two ways: by adpoting the SVSegmentedControlDelegate, or using a block.
Adopting the SVSegmentedControlDelegate protocol
Implement this delegate method so you can respond to the selected index change:
- (void)segmentedControl:(SVSegmentedControl*)segmentedControl didSelectIndex:(NSUInteger)index;
Using a block
Assign a block to the selectedSegmentChangedHandler property:
segmentedControl.selectedSegmentChangedHandler = ^(id sender) { SVSegmentedControl *segmentedControl = (SVSegmentedControl *)sender; NSLog(@"segmentedControl did select index %i", segmentedControl.selectedIndex); };