在View上嵌一个控件,从服务器得到defaultNumber,在页面加载后默认显示,而后按"+",个数增长;按"-",个数减小。在个数小于minNumber时,"-"按钮不可用。
新建一个类numberSelectView,继承UIView。控件都是在xib文件中使用,须要实现-(id)initWithCoder方法进行初始化。调用类和numberSelectView类的点击事件的关联,用协议和代理实现。
代码最直接了
.h文件segmentfault
#import <UIKit/UIKit.h> @class NumberSelectView; @protocol NumberSelectViewDelegate <NSObject> -(void)numberSelectView:(NumberSelectView*)numberSelectView currentNumber:(NSInteger)currentNumber; @ender @interface NumberSelectView : UIView //服务器得到的数字 @property (nonatomic, assign) NSInteger defaultNumber; //选择的最小值 @property (nonatomic, assign) NSInteger minNumber; //当前显示的数字 @property (nonatomic, assign) NSInteger currentNumber; @property (nonatomic, assign) id<NumberSelectViewDelegate> delegate; @end
.m文件服务器
#import "NumberSelectView.h" @interface NumberSelectView() @property (nonatomic, strong) UILabel *numberLabel; @property (nonatomic, strong) UIButton *cutButton; @end @implementation NumberSelectView -(id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { self.backgroundColor = [UIColor clearColor]; [self setView:self.frame]; } return self; } -(void)setView:(CGRect)frame { UIButton* addButton = [UIButton buttonWithType:UIButtonTypeCustom]; addButton.frame = CGRectMake(frame.size.width/2 + 15, 0, frame.size.width/2 - 15, frame.size.height); addButton.titleLabel.font = [UIFont systemFontOfSize:22]; [addButton setTitle:@"+" forState:UIControlStateNormal]; [addButton setBackgroundImage:[UIImage imageWithColor:[UIColor WhiteColor] cornerRadius:5] forState:UIControlStateNormal]; [addButton addTarget:self action:@selector(addNumber:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:addButton]; _cutButton = [UIButton buttonWithType:UIButtonTypeCustom]; _cutButton.frame = CGRectMake(0, 0, frame.size.width/2 - 15, frame.size.height); _cutButton.titleLabel.font = [UIFont systemFontOfSize:22]; [_cutButton setTitle:@"-" forState:UIControlStateNormal]; [_cutButton setBackgroundImage:[UIImage imageWithColor:[UIColor grayColor] cornerRadius:5] forState:UIControlStateNormal]; [_cutButton addTarget:self action:@selector(cutNumber:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_cutButton]; _numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(frame.size.width/2 - 15, 0, 30, frame.size.height)]; _numberLabel.backgroundColor = [UIColor clearColor]; _numberLabel.font = [UIFont systemFontOfSize:14]; _numberLabel.textColor = [UIColor darkGrayColor]; _numberLabel.textAlignment = NSTextAlignmentCenter; _numberLabel.text = @"0"; [self addSubview:_numberLabel]; } -(void)setDefaultNumber:(NSInteger)defaultNumber { _currentNumber = defaultNumber; [_cutButton setEnabled:_currentNumber>_minNumber]; _numberLabel.text = [NSString stringWithFormat:@"%d",defaultNumber]; } -(void)setMinNumber:(NSInteger)minNumber { _minNumber = minNumber; [_cutButton setEnabled:_currentNumber>_minNumber]; } -(void)setCurrentNumber:(NSInteger)currentNumber { _currentNumber = currentNumber; [_cutButton setEnabled:_currentNumber>_minNumber]; _numberLabel.text = [NSString stringWithFormat:@"%d",_currentNumber]; } - (void)addNumber:(UIButton*)addButton { _currentNumber++; _numberLabel.text = [NSString stringWithFormat:@"%d",_currentNumber]; if (_delegate != nil && [_delegate respondsToSelector:@selector(numberSelectView:currentNumber:)]) { [_delegate numberSelectView:self currentNumber:_currentNumber]; } [_cutButton setEnabled:(_currentNumber > _minNumber)]; } - (void)cutNumber:(UIButton*)cutButton { _currentNumber--; _numberLabel.text = [NSString stringWithFormat:@"%d",_currentNumber]; if (_delegate != nil && [_delegate respondsToSelector:@selector(numberSelectView:currentNumber:)]) { [_delegate numberSelectView:self currentNumber:_currentNumber]; } [cutButton setEnabled:!(_minNumber == _currentNumber)]; } @end
在用到该View的类里,在delegate方法里写具体事件。ide