oc之封装「可输入值」的UIStepper

时间:2022-06-20 23:44:54

2017.07.17 18:10* 字数 66 阅读 644评论 0喜欢 5

oc之封装「可输入值」的UIStepper

 

oc之封装「可输入值」的UIStepper

最终效果

要求:

  • Platform: iOS7.0+
  • Language: Objective-C
  • Editor: Xcode6.0+

实现

  • 思路
    UIButton + UITextField + UIButton + NSLayoutConstraint
  • 核心代码
    1. setters

#pragma mark - setters

 

// 当前值

-(void)setValue:(double)value{

    if (value < _minValue) {

        value = _minValue;

    }

    else if (value > _maxValue){

        value = _maxValue;

    }

    

    _minusBtn.enabled = value > _minValue;

    _plusBtn.enabled = value < _maxValue;

    _valueTF.text = [NSString stringWithFormat:@"%.0f",value];

        

    _value = value;

    

    _valueChanged ? _valueChanged(_value) : nil;

}

 

// 最大值

-(void)setMaxValue:(double)maxValue{

    if (maxValue < _minValue) {

        maxValue = _minValue;

    }

    _maxValue = maxValue;

}

 

// 最小值

-(void)setMinValue:(double)minValue{

    if (minValue > _maxValue) {

        minValue = _maxValue;

    }

    _minValue = minValue;

}

 

// 是否可输入值

-(void)setIsValueEditable:(BOOL)isValueEditable{

    _isValueEditable = isValueEditable;

    

    _valueTF.enabled = _isValueEditable;

}

2. 事件处理

#pragma mark - action

// 按钮点击

-(void)actionForButtonClicked: (UIButton*)sender{

    if ([sender isEqual:_minusBtn]) {

        self.value = _value - _stepValue;

    }

    else if([sender isEqual:_plusBtn]){

        self.value = _value + _stepValue;

    }

}

 

// 输入事件

-(void)actionForTextFieldValueChanged: (UITextField*)sender{

    if ([sender isEqual:_valueTF]) {

        self.value = [sender.text doubleValue];

    }

}

  • 用法: 支持xibinitWithFrame

- (void)viewDidLoad {

    [super viewDidLoad];

 

// 值改变回调

    _stepper.valueChanged = ^(double value) {

        _label.text = [NSString stringWithFormat:@"%.f",value];

    };

}

github

https://github.com/BackWorld/HYStepper