美文网首页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