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

  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. python自省函数getattr的用法

    getattr是python里的一个内建函数 getattr()这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以把一个类可能要调用的方法放在配置文件里,在需要的时 ...

  2. discuz!安装遇到问题的解决方案

    正常的安装步骤好多地方都有写过了,我安装的时候遇到问题百度翻了个遍也没有找到,现在问题已经解决了,发出了分享一下! 进入第三步创建数据库的时候提示:由于目标计算机积极拒绝,无法连接. 打开phpmya ...

  3. MySQL命令实例

    显示数据表结构 1.desc(describe) tablename;2.show columns from tablename;3.use information_schema;    select ...

  4. ajax跨域往php程序post数据时,php程序总是执行两次的解决方法

    php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了: header('Acc ...

  5. NPOI 导入导出excel 支持 03 07

    因为微软的office成本太高了,所以开发项目的时候电脑上没安装office,而是安装了wps.但开发语言用的是C#,所以直接调用微软的office组件是很方便的,但一方面慢,一方面成本高,所以从网上 ...

  6. rem介绍

    手机端开发,一般以320px宽为最低标题.市场上的手机,大多数是360px宽. 20px=1rem是最容易换算的,基本上可以口算,除以2并缩小十倍.1px/20=0.05rem.两位小数就可以除尽了. ...

  7. SQL关于limit的用法

    SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset    在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时 ...

  8. json改造优化无刷新分页

    index.html dd

  9. Ubuntu 14.04 更新源

    deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiversedeb http://mirrors.163. ...

  10. .net/C# HttpWebRequest传送与接收参数

    public string PostData(string url, string data)//url:要发送到网站的地址 data:传送需要的参数 { HttpWebRequest myReque ...