美文网首页iOS开发小Tips闻道丶iOS(尝鲜版)
UITextField设置leftView、圆角以及文字距离

UITextField设置leftView、圆角以及文字距离

作者: Originalee | 来源:发表于2016-03-30 01:56 被阅读12775次

今天在工作中,搭建一个登录界面,因为涉及到用户名和密码的输入,所以在iOS中我们免不了要用到UITextField这个常见的输入控件。首先来看一下美工给我的效果图,这里我仅仅截出了UITextField这个部分的效果:

UITextField效果UITextField效果

这里我们能看到这个UITextField的基本要求有如下几个:

  • 输入框内有提示图片
  • 之后输入的文字与输入框内的图片有间距
  • 输入框有圆角

大致分为上面的三个特殊要求,那么我们一个一个来分析,首先是输入框内的提示图片,这里我们要讲UITextField里的两个属性,leftview和rightview,这两个属性分别能设置textField内的左右两边的视图,可以插入图片,我用最简单的代码来展示textField的leftview怎么实现。


 UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"github.jpg"]];
    
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
    textField.leftView =imgView;
    textField.leftViewMode = UITextFieldViewModeAlways;
    
    [self addSubview:textField];

上面的代码,我们能很清楚的看到首先定义一个UIImageView,之后把这个imageView设置成textField的leftview,之后设置leftview的样式,就可以很简单的定义一个leftview。

UITextFieldViewMode是一个枚举类型,有如下属性:

typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    UITextFieldViewModeNever,
    UITextFieldViewModeWhileEditing,
    UITextFieldViewModeUnlessEditing,
    UITextFieldViewModeAlways
};

但是这样设置的TextField我们会发现,图片是紧紧贴在输入框的边缘的,看起来特别别扭不舒服,那么该怎么设置呢?我们可以子类化一个TextField,去复写它的一个方法来设置leftView的位置

- (CGRect)leftViewRectForBounds:(CGRect)bounds
{
    CGRect iconRect = [super leftViewRectForBounds:bounds];
    iconRect.origin.x += 15; //像右边偏15
    return iconRect;
}

在继承与UITextField中复写这个方法,得到的结果是leftView像右偏移15,是不是很简单呢。

如果这时候我们在输入框中打字,会发现leftview确实跟最初的输入框产生的距离,但是我们打出来的字还是紧紧的黏在图片上,用户体验也极差,根据上面的思路,我们可以接着在这个子类中复写它的设置方法来实现。


//UITextField 文字与输入框的距离
- (CGRect)textRectForBounds:(CGRect)bounds{
    
    return CGRectInset(bounds, 45, 0);
    
}

//控制文本的位置
- (CGRect)editingRectForBounds:(CGRect)bounds{
    
    return CGRectInset(bounds, 45, 0);
}

之前的图片是20大小,加上偏移的15那么一共是35,所以我们设置偏移45的量,即为文本比leftView的图片的最右边向右15。至此,我们已经完成了textField的文本和图片设置,最后来看一下圆角。

圆角有两种实现方式,一种是在layer层处理,来渲染绘制圆角

    textField.layer.cornerRadius = 4;
    textField.layer.masksToBounds = YES;

第二种是设置UITextfield的样式,也能实现自带圆角,但是这个圆角的值是固定的

textField.borderStyle = UITextBorderStyleRoundedRect; 

写到这里,这个UITextField在界面上的要求就已经基本完成了,一般我们用到的常用属性也就是这些。

相关文章

网友评论

  • 1a2757c78d1b:右边那只眼睛有人写过么
  • OCDak://UITextField 文字与输入框的距离
    - (CGRect)textRectForBounds:(CGRect)bounds{

    return CGRectInset(bounds, 45, 0);

    } 我这个 如果45大于 textfield的高,就会崩溃是什么问题啊?
    奥尔良小短腿:@OCDak 我直接返回了一个CGRect
    OCDak:@niveK 没有啊,你呢
    奥尔良小短腿:我也遇到了,你有没有解决?
  • fuccccck_iOS:你好 按照你的方法写了以后 那块真正输入的地方的长度变短了。怎么解决啊
    币笔狗:用一个视图包住一个imageview 整体为leftview 不用重写那个bounds的两个方法
  • AUL:感谢!!
  • ao305:写的很好!! :+1:
  • zedxpp:leftView和textField间距的问题. 用一个view包装imageview (view的宽高比imageview多一点, 需要留边多少就加多少) 然后把view 放到 leftView中去. 就能解决间距问题了.还有一种方法就是图片干脆切的时候就留点白边.
  • 夏天爱西瓜汁:leftview的大小是固定的么
  • 清晨日暮: :disappointed_relieved: 然而这样写的话不同屏幕尺寸的适配就会出现问题吧。。
  • TongRy:感谢您,这篇文章成功解决了我的问题,谢谢
    Originalee:@TongRy 不用客气

本文标题:UITextField设置leftView、圆角以及文字距离

本文链接:https://www.haomeiwen.com/subject/beislttx.html