PKYStepper is a customizable UIControl with stepper and label combined.
iOS6+
- block based callback for when value changed, incremented, and decremented
- toggle visibility of increment/decrement button when the value reached its maximun/minimum
- works well with storyboard
You can either install using cocoapods(recommended) or copying files manually.
In your Podfile, add a line
pod 'PKYStepper', '0.0.1'
then, run pod install
.
- Clone this repository
- Add files under PKYStepper directory to your project
Add #import 'PKYStepper.h'
in one of your files, and see if your target builds without error.
You need to create a bridging header and add #import "PKYStepper.h"
to the header to use the library in swift code.
For instruction on how to create a bridging header, please refer to Apple's documentation.
Drag UIView
to your storyboard and change its class to PKYStepper
. For actual example, take a look at StoryboardViewController.storyboard
in example project.
@property(nonatomic, weak) IBOutlet PKYStepper *stepper;
- (void)viewDidLoad {
[super viewDidLoad];
self.stepper.value = 5.0f;
self.stepper.stepInterval = 5.0f;
self.stepper.valueChangedCallback = ^(PKYStepper *stepper, float count) {
stepper.countLabel.text = [NSString stringWithFormat:@"Count: %@", @(count)];
};
[self.stepper setup];
}
@IBOutlet weak var stepper: PKYStepper
override func viewDidLoad() {
super.viewDidLoad()
stepper.value = 5.0
stepper.stepInterval = 5.0
stepper.valueChangedCallback = { stepper, count in
stepper.countLabel.text = "Dogs: \(count)"
}
stepper.setup()
}
@property(nonatomic, strong) PKYStepper *stepper;
- (void)viewDidLoad {
[super viewDidLoad];
float width = 260.0f;
float x = ([UIScreen mainScreen].bounds.size.width - width) / 2.0;
self.stepper = [[PKYStepper alloc] initWithFrame:CGRectMake(x, 100, width, 44)];
self.stepper.valueChangedCallback = ^(PKYStepper *stepper, float count) {
stepper.countLabel.text = [NSString stringWithFormat:@"Dogs: %@", @(count)];
};
[self.stepper setup];
[self.view addSubview:self.stepper];
}
Set a callback and call setup
.
PKYStepper *stepper = [[PKYStepper alloc] initWithFrame:frame];
stepper.valueChangedCallback = ^(PKYStepper *stepper, float count) {
stepper.countLabel.text = [NSString stringWithFormat:@"%@", @(count)];
};
[stepper setup];
[self.view addSubview:stepper];
let stepper = PKYStepper(frame: frame)
stepper.valueChangedCallback = { stepper, count in
stepper.countLabel.text = "\(count)"
}
stepper.setup()
self.view.addSubview(stepper)
float value; // default: 0.0
float stepInterval; // default: 1.0
float minimum; // default: 0.0
float maximum; // default: 100.0
BOOL hidesDecrementWhenMinimum; // default: NO
BOOL hidesIncrementWhenMaximum; // default: NO
CGFloat buttonWidth; // default: 44.0f
// called when value is incremented
PKYStepperIncrementedCallback incrementCallback;
// called when value is decremented
PKYStepperDecrementedCallback decrementCallback;
// customizing appearance
- (void)setBorderColor:(UIColor *)color;
- (void)setBorderWidth:(CGFloat)width;
- (void)setCornerRadius:(CGFloat)radius;
- (void)setLabelTextColor:(UIColor *)color;
- (void)setLabelFont:(UIFont *)font;
- (void)setButtonTextColor:(UIColor *)color forState:(UIControlState)state;
- (void)setButtonFont:(UIFont *)font;
CountLabel and buttons are exposed as properties, so customize the properties if you need further control.