UITextField的那点事

输入限制 限制扩展 自定义的限制 键盘遮盖 尾语 UITextField被用作项目中获取用户信息的重要控件,但是在实际应用中存在的不少的坑:修改keyboardType来限制键盘的类型,却难以限制第三方键盘的输入类型;在代理中限制了输入长度以及输入的文本类型,但是却抵不住中文输入的联想;键盘弹起时遮住输入框,需要接收键盘弹起收回的通知,然后计算坐标实现移动动画。 对于上面这些问题,苹果提供给我们文本输入框的同时并不提供解决方案,因此本文将使用category+runtime的方式解决上面提到的这些问题,本文假设读者已经清楚从UITextField成为第一响应者到结束编辑过程中的事件调用流程。 输入限制 最常见的输入限制是手机号码以及金额,前者文本中只能存在...
Click to read more ...

按钮动画

关于图层 基础动画 动画组 按钮动画 尾话 在上一篇认识CoreAnimation中笔者介绍了系统的动画库CoreAnimation,使用动画库有很多好处,这里就不再进行重复叙述。那么本篇将承接上一篇的内容,使用提到的基础的动画相关类来实现动画效果,效果图放上: 大体上可以看到demo主要是渐变以及形变两种动画,在更早之前的文章,我们就使用UIView的动画接口完成过相同的动画,而这次将换成CoreAnimation来完成这些工作 关于图层 在iOS中,每一个UIView都拥有一个与之绑定的CALayer图层对象,其负责视图内容的绘制与显示。跟前者一样,CALayer也拥有树状的子图层结构,以及相似的接口方法。CALayer是图层的基类,主要提供了视图显示...
Click to read more ...

聊聊协议

协议应用 什么时候用代理 数据源 协议抽象 结束语 何为协议,简单来说在OC中我们使用关键字@protocol可以声明一个协议,并在协议中添加多个属性、方法供于遵循者实现,从某个角度上来说,这是一种不同于category机制的category。在日常开发中,协议可谓无处不在,最为核心的UITableView通过协议来获取数据、完成事件处理等。下面就是一个最粗浅的协议 @protocol CustomProtocol - (void)doSomething; @end 对于协议的理解,很多的开发者依旧保留在委托-代理等于协议等认知上。然而前者依赖于后者的实现,而后者即便不通过前者也能完成抽象解耦的工作。在...
Click to read more ...

原型模式

概述 简单形式拷贝 登记拷贝 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 通过复制一个已存在的对象来获得一个新的相同类型的对象被称作原型模式,在复制的过程中不需要关心被复制对象实现的接口或者类型 原型模式Prototype具有如下优点: 隐藏了创建对象的实现细节 复制操作不受子类构造器改变影响 避免了重复创建对象产生的大量代码 简单来说,原型模式分为以下两种: 简单拷贝 登记拷贝 没有使用原型Prototype的拷贝代码是怎样的呢?我们需要通过访问 class Pe...
Click to read more ...

去Model化开发

使用背景 实现 尾言 去model化是一种框架设计上的做法,其中的model并不是指架构中的model层,套用Casa大神博客中的原文就是: model化就是使用数据对象,去model化就是不使用数据对象。 常见的去model化做法是使用字典保存数据信息,然后提供一个reformer负责将这些字典数据转换成View层可展示的信息,其流程图如下: 更详细的理论知识可以看Casa大神的去model化和数据对象。本文基于Casa大神的实践基础使用另外一种去model化的实现方式。 使用背景 在很早之前就看过大神的文章,不过一直没有去尝试这种做法。在笔者最近跳入新坑之后,总算是有了这么一次机会。需求是存在着三个非常相似的cell,但分别对应着不同的数据mode...
Click to read more ...

MVC架构杂谈

如何分层 模型Model应该放什么代码 I/O操作 视图层的Self-Manager 视图层的动画效果 瘦身Controller 尾言 MVC是软件工程中的一种软件架构模式,它把软件系统分为三个基本的部分:模型Model、视图View以及控制器Controller。这种模式的目的是为了实现一种动态的程序设计,简化后续对软件系统的修改和扩展,并使得程序的某一部分的复用成为可能。三个部分按照其各自的职责划分: 数据Model: 负责封装数据、存储和处理数据运算等工作 视图View: 负责数据展示、监听用户触摸等工作 控制器Controller: 负责业务逻辑、事件响应、数据加工等工作 在传统的MVC结构中,数据层在发生改变之后会通...
Click to read more ...

JavaScript交互

坑爹时代 当前混合开发模式迎来了前所未有的发展,跨平台开发、热更新等优点决定了这种模式的重要地位。虽然前端界面在交互、动效等多方面距离原生应用还有差距,但毫无疑问混合开发只会被越来越多的公司接受。在iOS中,混合开发模式被分为两个时代,分别是iOS7之前的坑爹时代与之后的黄金时代,其分割代表为JavaScriptCore框架 坑爹时代 作为完美避开iOS7之前版本的幸运儿,我只能从某位前辈的口中得知那悲惨的岁月。作为那个年代唯一能与前端界面交互的手段就是UIWebView,先不说它自身的内存泄露缺陷,下面是一段前辈写过的代码: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRe...
Click to read more ...