在很多产品设计的时候,产品设计人员设计出来的输入框总会要求,文字的内容距离做边框多少像素,编辑区域的其实点,距离左边多少像素,很多人绝的难以适应!其实这些都不存在很大的技术难度,一下这些方式都可以达到这样的一个目的:

  1.边框用一个图片,然后在图片上添加隐形的UITextFied,更改输入框的大小,位置,这样通过障眼法就可以达到产品设计的要求。

  2.UITextField 是有leftView这样的一个功能,那么就可以在左边添加一个全透明的view.用以边框个输入区域的隔离。也可以达到对应的产品设计要求

  3.最好的一种方式,当然是一劳永逸的方式,也就是重写UITextField.通过重写其对应的方法,然后在后续的过程中,可以很方便的使用,在这里主要是描述这样的一个写法,。

  示例的要求主要如下:输入区域必须距离做边框的距离为10像素。重写UITextFiled.如下:

#import <UIKit/UIKit.h>

@interface HJUITextField : UITextField

@end

#import "HJUITextField.h"

@implementation HJUITextField

- (id)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

// Initialization code

}

returnself;

}

-(CGRect)textRectForBounds:(CGRect)bounds{

return CGRectInset(bounds, 10, 0);

}

-(CGRect)editingRectForBounds:(CGRect)bounds{

return CGRectInset(bounds, 10, 0);

}

@end

从上面可以看出,我们主要是重写了UITextField的两个方法,分别为:

-(CGRect)textRectForBounds:(CGRect)bounds

-(CGRect)editingRectForBounds:(CGRect)bounds

在两个方法中我们分别返回编辑的区域和文本显示的区域,通过重写这两个方法很好的满足了产品设计的要求。当然UITextField还有其它的一些方法。如

(CGRect)borderRectForBounds:(CGRect)bounds;

- (CGRect)textRectForBounds:(CGRect)bounds;

- (CGRect)placeholderRectForBounds:(CGRect)bounds;

- (CGRect)editingRectForBounds:(CGRect)bounds;

- (CGRect)clearButtonRectForBounds:(CGRect)bounds;

- (CGRect)leftViewRectForBounds:(CGRect)bounds;

- (CGRect)rightViewRectForBounds:(CGRect)bounds;

- (void)drawTextInRect:(CGRect)rect;

- (void)drawPlaceholderInRect:(CGRect)rect;

通过重写这些方法,对应的一些特殊的产品设计要求基本上都能实现,这种方法的好处在于,一个产品在视觉上很多时候都是统一的。也就是说在产品开发的初期,如果重写这些方法,在后续的使用过程中,很方便的重复使用

UITextField 的重写的更多相关文章

  1. UITextField的常用属性,Delegate,重绘

        一  属性 UITextField * myTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 200, 50 ...

  2. iOS: hide UITextField Cursor

    Simply subclass UITextField and override caretRectForPosition (继承 UITextField 并且重写 [UITextField care ...

  3. IOS开发基础知识--碎片35

    1:iOS视图控制对象生命周期 init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用: viewDidAp ...

  4. iOS开发的小技巧

    转自简书:http://www.jianshu.com/p/50b63a221f09  http://www.jianshu.com/p/08f194e9904c 原作者:叶孤城___ self.ta ...

  5. iOS开发的一些奇巧淫技

    TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. self.tableView.tableFooterView = [[UIView alloc] in ...

  6. iOS开发的22个奇谲巧技

    结合自身的实践开发经验总结出了22个iOS开发的小技巧,以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题,光读着便已忍俊不禁. 1. TableView不显示没内容的Cell怎么办? 类似于图1 ...

  7. iOS开发的一些奇巧淫技2

    能不能只用一个pan手势来代替UISwipegesture的各个方向? - (void)pan:(UIPanGestureRecognizer *)sender { typedef NS_ENUM(N ...

  8. iOS 仿支付宝密码支付

    代码地址如下:http://www.demodashi.com/demo/11484.html 一.准备工作 xcode 主要实现输入密码的时候不可见 二.程序实现 实现思路怎样 在支付宝输入密码的时 ...

  9. 自定义UITextField(UITextField重写)

    // CustomField.h #import <UIKit/UIKit.h> @interface CustomField : UITextField @end // CustomFi ...

随机推荐

  1. 产生某个区间的随机整数 int #Java

    int max = Integer.MAX_VALUE; int min = 1; Random random = new Random(); int s = random.nextInt(max)% ...

  2. angular报$injector / unpr的错误

    原因:angular引用未定义的错误,因为JS代码压缩过后找不到申明的变量,,没在使用之前定义,且代码被压缩,则报错(变量压缩后会变成单个字母无法识别,需在引用前分别定义): 解决:angular.m ...

  3. mysql中的where和having子句的区别

    mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句 ...

  4. mysql三种注释方法

    SELECT * from test;#test表select * from user;-- 用户表select * from tb_test_paper;/*试卷表*/

  5. Python多线程开发简介

    Python的并发程序可以使用multiprocessing库.threading库.asyncio库.concurrent.futures库以及selectors库等等协助编写: multiproc ...

  6. [03]APUE:文件 I/O

    [a] open #include <fcntl.h> int open(const char *path, int oflag, ... ,mode_t mode) 成功返回文件描术符, ...

  7. Windows下解压版mysql的安装方法

    1 首先下载mysql的解压版的rar安装包 1 将安装包解压到安装路径.C:\Program Files (x86)\MySQL2 将安装路径下的bin追加到环境变量"PATH" ...

  8. Ajax Step By Step5

    第五.[表单序列化] Ajax 用的最多的地方莫过于表单操作,而传统的表单操作是通过 submit 提交将数据传 输到服务器端.如果使用 Ajax 异步处理的话,我们需要将每个表单元素逐个获取才方能提 ...

  9. 网站内容禁止复制和粘贴、另存为的js代码(转)

    1.使右键和复制失效 方法1: 在网页中加入以下代码: 代码如下: <script language="Javascript"> document.oncontextm ...

  10. Linux Oracle删除归档日志

    今天遇到Oracle报这样的错:ORA-00257 查看了下,原来是Oracle的归档日志满了,解决方案两个 一:增加归档日志大小 二:删除无用的归档日志(我们选择这个方案) 什么也不说了Linux下 ...