oc之封装「可输入值」的UIStepper
2017.07.17 18:10* 字数 66 阅读 644评论 0喜欢 5
最终效果
要求:
- 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];
}
}
- 用法: 支持xib和initWithFrame
- (void)viewDidLoad {
[super viewDidLoad];
// 值改变回调
_stepper.valueChanged = ^(double value) {
_label.text = [NSString stringWithFormat:@"%.f",value];
};
}
github
https://github.com/BackWorld/HYStepper
oc之封装「可输入值」的UIStepper的更多相关文章
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
- fir.im Weekly - 如何打造 Github 「爆款」开源项目
最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...
- 当你「ping 一下」的时候,你知道它背后的逻辑吗?
我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况.那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗? 一.「ping」命令的作用和原理? 简单来说,「ping」是 ...
- 「Android 开发」入门笔记
「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...
- 「SAP技术」SAP 如何看序列号被包在哪些HU里?
「SAP技术」SAP 如何看序列号被包在哪些HU里? 事务代码SE16 ,表名OBJK, 输入物料号,序列号,HeadTable 输入值SER06, 查询结果如下, 根据objlist, 去表ser0 ...
- 「C++ 篇」答应我,别再if/else走天下了可以吗
每日一句英语学习,每天进步一点点: "Without purpose, the days would have ended, as such days always end, in disi ...
- 「学习笔记」Treap
「学习笔记」Treap 前言 什么是 Treap ? 二叉搜索树 (Binary Search Tree/Binary Sort Tree/BST) 基础定义 查找元素 插入元素 删除元素 查找后继 ...
- SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
随机推荐
- Not Found woff 字体库
原因是,默认在IIS上是没有添加对*.woff,*.svg文件的Mime类型,因此在客户端请求此类文件时得到的都是404. 所以我们只需要在我们对应网站下的Mime类型中添加文件对应的类型就行了 .w ...
- ELK 处理 Percona 审计日志(填坑)
前提 1.有强烈的审计需求. 2.能允许10%-15%左右的性能损失. 3.有强烈的对数据库操作实时查看需求(一般都是为了领导要求). Logstash 比较坑的配置 1 2 3 4 5 6 7 ...
- jdk8新特性表达式1
Jdk8中有好多新的特性,比如引入Lambda,简化代码的书写等等 我们先看一个关于Lambda的使用 /*** 输出list */@Testpublic void test() { String[] ...
- 在Django中接收文件并存储
首先是一个views函数的例子 def get_user_profiles(request): if request.method == 'POST': myFile = request.FILES. ...
- dp 洛谷P1977 出租车拼车 线性dp
题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...
- 1.02-get-params
import urllib.request import urllib.parse import string def get_method_params(): url = "http:// ...
- python六十四课——高阶函数练习题(二)
总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...
- Android面试题目整理与解说(二)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/bz419927089/article/details/31386787 1.Dalvik和标准Jav ...
- Python:Day07 作业
三级菜单: 自己做的代码: china = { '江苏':{ '南京':{ '江宁':{}, '白下':{}, '栖霞':{}, '江淮':{}, '浦口':{} }, '宿迁':{ '宿城区':{} ...
- java爬虫代理
public static Document getDocByJsoups(String href) { String ip = "124.47.7.38"; int port = ...