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 ...
随机推荐
- dialog 关闭 清除
div.dialog({ close: function () { $(this).dialog('destroy').remove(); } });
- C#从http上拿返回JSON数据
C#如何拿到从http上返回JSON数据? 第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) ...
- ELK-elkstack-使用消息队列
日志通过logstash收集到redis,之后从logstash从redis读取数据存入到ES 1. logstash使用redis测试 通过标准输入到redis中 logstash配置与启动 [yu ...
- Should we ban guns 英语禁枪议论文
Should we ban guns ? 我们应该禁枪吗? 英语议论文 Should we ban guns? Author:Pleiades_Antares(www.cnblogs.com/iris ...
- Nginx使用教程(七):使用Nginx缓存之proxy cache
定义缓存目录 <br\>使用您喜欢的文本编辑器打开/etc/nginx/nginx.conf,并在http {区域加入: proxy_cache_path /var/www/cache ...
- A - Packets 贪心
A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, ...
- PHP 缓存技术(一)
移除光盘
- mongoDB2.6,java使用具体解释
本文使用的环境是:win7_64+Eclipse+maven 一.准备工作 下载java驱动包 驱动包下载地址:http://mvnrepository.com/artifact/org.mongod ...
- 解决不能再jupyter notebook中使用tensorflow
在搭建cuda + Anaconda + tensorflow的开发环境时,在虚拟环境中的jupyter notebook启动后无法导入tensorflow.具体解决方案如下: 1.首先在虚拟环境中安 ...
- with as 加上 materialize hint 生成实质临时表
WITH AS: 就是将一个子查询部分独立出来,有时候是为了提高SQL语句的可读性,有时候是为了提高SQL语句性能. 如果一个SQL语句中,某个表会被访问多次,而且每次访问的限制条件一样的话,就可以使 ...