调整UITextField中文本框的边距-offset

2016-09-27  本文已影响0人  lucasdada

文章导读:当我们想调整UITextField中所编辑文本位置与边框的距离时,我们可以通过以下方法实现,当然也可以调整提示文本的位置与边框的距离。

1:创建一个新的类,继承于UITextField

@interface MyTextField : UITextField

2:重写UItextField中提供的方法,这些方法在子类中实现之后会被自动调用,所以我们只需重写,不用再去调用。

这里使用到了

CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)

这个结构体,先做一下简单的介绍。这个结构体在文档中的注释是:

/* Inset `rect' by `(dx, dy)' -- i.e., offset its origin by `(dx, dy)', and

decrease its size by `(2*dx, 2*dy)'. */

大意为:矩形框会偏离原本坐标(dx,dy)的位置,就是说如果(dx,dy)是(3,4)那么就是沿着X轴的正方向移动3,向Y轴的正方向移动4。这里我们要注意到苹果屏幕的坐标是以左上方为原点,X轴向右为正,Y轴向下为正。那么第一个参数rect又是什么呢?它传递过来的是某个矩形框的CGRecct,为了保证这个框的中心位置不会偏移,会将矩形框偏移后的大小也同时进行调整,此时矩形框的宽高分别减少(2 * dx,2 * dy),当偏移量为(3,4)时,矩形框就减少(6,8)。(扩展:当然,dx和dy都也可以是负数,当他们是负数时就代表时往坐标轴的负方向移动,此时矩形框的大小会变大。当然这也是为了实现矩形框的中心坐标不会偏移的结果)

 当然我们也可以自定义自己想要的结构体,对于这个结构体,就只是进行了一下简单的数学坐标变换和大小调整而已,目的时为了使的中心坐标不会偏移。

///place holder position

- (CGRect)placeholderRectForBounds:(CGRect)bounds

{

return CGRectInset(bounds, 8, 8);

}

// text position

- (CGRect)textRectForBounds:(CGRect)bounds {

return CGRectInset(bounds, 8,4);

}

// text position while editing

- (CGRect)editingRectForBounds:(CGRect)bounds {

return CGRectInset(bounds, 8, 4);

}

下面我们来看看UITextField中的以下的方法:

// drawing and positioning overrides

绘制和位置的重写

1:- (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;

上一篇下一篇

猜你喜欢

热点阅读