/SVSegmentedControl

A UISwitch-like segmented control for your iOS app.

Primary LanguageObjective-CMIT LicenseMIT

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);
	};