// NumberButton的 .h文件
#import <UIKit/UIKit.h>
@protocol NumberButtonDelegate <NSObject>
- (void)clickButton:(NSInteger)currentNumber;
@end
@interface NumberButton : UIView
/**
减法按钮
*/
@property (nonatomic,strong)UIButton *subtractButton;
/**
加法按钮
*/
@property (nonatomic,strong)UIButton *addButton;
/**
显示数字
*/
@property (nonatomic,strong)UILabel *numberLabel;
/**
获取当前数字
*/
@property (nonatomic,assign)NSInteger currentNumber;
/**
最小值
*/
@property (nonatomic,assign)NSInteger minValue;
/**
最大值
*/
@property (nonatomic,assign)NSInteger maxValue;
/**
减法图片
*/
@property (nonatomic,strong)UIImage *subtractImage;
/**
加法图片
*/
@property (nonatomic,strong)UIImage *addImage;
/**
减法图片 不允许点击
*/
@property (nonatomic,strong)UIImage *subtractImage1;
/**
加法图片 不允许点击
*/
@property (nonatomic,strong)UIImage *addImage1;
/**
边框颜色
*/
@property (nonatomic,strong)UIColor *borderColor;
//****************************************************Block用法*************************************************//
/**
Bolk 回调 按钮点击
*/
@property (nonatomic,copy) void (^ClickButtonBlock)(NSInteger currentNumber);
//****************************************************Block用法*************************************************//
@property (nonatomic,weak) id <NumberButtonDelegate>delegate;
@end
//NumberButton 的 .m文件
#import "NumberButton.h"
// 默认
#define buttonWith 40
@interface NumberButton ()
{
CGFloat _viewWith;
CGFloat _buttonWith;
CGFloat _buttonHeight;
}
@end
@implementation NumberButton
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_viewWith = frame.size.width;
_buttonHeight = frame.size.height;
[self createSubtractButton];
[self createAddButton];
[self createNumberLabel];
[self createKVO];
}
return self;
}
- (void)createSubtractButton
{
self.subtractButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.subtractButton.frame = CGRectMake(0, 0, buttonWith, _buttonHeight);
[self.subtractButton setImage:[UIImage imageNamed:@"reduction1"] forState:UIControlStateNormal];
[self.subtractButton addTarget:self action:@selector(subtractButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:self.subtractButton];
}
- (void)createAddButton
{
self.addButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.addButton.frame = CGRectMake(_viewWith - buttonWith, 0, buttonWith, _buttonHeight);
[self.addButton setImage:[UIImage imageNamed:@"add2"] forState:UIControlStateNormal];
[self.addButton addTarget:self action:@selector(addButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:self.addButton];
}
- (void)createNumberLabel
{
self.numberLabel = [[UILabel alloc]initWithFrame:CGRectMake(buttonWith, 0, _viewWith - buttonWith * 2, _buttonHeight)];
self.numberLabel.text = @"0";
self.numberLabel.textAlignment = NSTextAlignmentCenter;
[self.numberLabel setLabelPropertyFontSize:18 andTextColor:@"#666666" andBackGroundColor:nil];
self.numberLabel.layer.masksToBounds = YES;
self.numberLabel.layer.cornerRadius = cornerRadius;
self.numberLabel.layer.borderWidth = 0.5;
self.numberLabel.layer.borderColor = [UIColor blackColor].CGColor;
[self addSubview:self.numberLabel];
}
- (void)createKVO
{
[self addObserver:self forKeyPath:@"currentNumber" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
if (self.currentNumber <= _minValue) {
self.subtractButton.userInteractionEnabled = NO;
[self.subtractButton setImage:_subtractImage1 != nil?_subtractImage1:[UIImage imageNamed:@"reduction1"] forState:UIControlStateNormal];
}else{
self.subtractButton.userInteractionEnabled = YES;
[self.subtractButton setImage:_subtractImage != nil?_subtractImage:[UIImage imageNamed:@"reduction2"] forState:UIControlStateNormal];
}
if (self.currentNumber >=_maxValue) {
self.addButton.userInteractionEnabled = NO;
[self.addButton setImage:_addImage1 != nil?_addImage1:[UIImage imageNamed:@"add1"] forState:UIControlStateNormal];
}else{
self.addButton.userInteractionEnabled = YES;
[self.addButton setImage:_addImage != nil?_addImage:[UIImage imageNamed:@"add2"] forState:UIControlStateNormal];
}
}
- (void)subtractButtonAction:(UIButton *)sender
{
NSInteger number = [self.numberLabel.text integerValue];
if (number <=(_minValue >= 0?_minValue:0)) {
return;
}
number -= 1;
self.currentNumber = number;
self.numberLabel.text = [NSString stringWithFormat:@"%ld",number];
// 回调
if (self.ClickButtonBlock) {
self.ClickButtonBlock(self.currentNumber);
}
// 代理
if (self.delegate && [self.delegate respondsToSelector:@selector(clickButton:)]) {
[self.delegate clickButton:self.currentNumber];
}
}
- (void)addButtonAction:(UIButton *)sender
{
NSInteger number = [self.numberLabel.text integerValue];
if (number >=( _maxValue>= 0?_maxValue:100)) {
return;
}
number += 1;
self.currentNumber = number;
self.numberLabel.text = [NSString stringWithFormat:@"%ld",number];
// 回调
if (self.ClickButtonBlock) {
self.ClickButtonBlock(self.currentNumber);
}
// 代理
if (self.delegate && [self.delegate respondsToSelector:@selector(clickButton:)]) {
[self.delegate clickButton:self.currentNumber];
}
}
- (void)setAddImage:(UIImage *)addImage
{
_addImage = addImage;
[self.addButton setImage:addImage forState:UIControlStateNormal];
}
- (void)setSubtractImage:(UIImage *)subtractImage
{
_subtractImage = subtractImage;
[self.subtractButton setImage:subtractImage forState:UIControlStateNormal];
}
- (void)setAddImage1:(UIImage *)addImage1
{
_addImage1 = addImage1;
}
- (void)setSubtractImage1:(UIImage *)subtractImage1
{
_subtractImage1 = subtractImage1;
}
- (void)setCurrentNumber:(NSInteger)currentNumber
{
_numberLabel.text = [NSString stringWithFormat:@"%ld",currentNumber];
}
- (NSInteger)currentNumber
{
return [_numberLabel.text integerValue];
}
- (void)setMinValue:(NSInteger)minValue
{
_minValue = minValue;
_numberLabel.text = [NSString stringWithFormat:@"%ld",minValue];
}
- (void)setMaxValue:(NSInteger)maxValue
{
_maxValue = maxValue;
}
- (void)setBorderColor:(UIColor *)borderColor
{
_borderColor = borderColor;
self.numberLabel.layer.borderColor = borderColor.CGColor;
}
// block 使用方式
NumberButton *numberButton = [[NumberButton alloc]initWithFrame:CGRectMake(100, 300, 150, 50)];
numberButton.maxValue = 10;
[self.view addSubview:numberButton];
numberButton.ClickButtonBlock = ^(NSInteger currentNumber) {
NSLog(@"%ld",currentNumber);
};
// delegate 用法
/*
1,遵循 <NumberButtonDelegate> 代理
*/
/*
2,设置代理
*/
NumberButton *numberButton = [[NumberButton alloc]initWithFrame:CGRectMake(100, 300, 150, 50)];
numberButton.maxValue = 10;
numberButton.delegate = self;
[self.view addSubview:numberButton];
/*
3,实现代理方法
*/
- (void)clickButton:(NSInteger)currentNumber
{
NSLog(@"%ld",currentNumber);
}