美文网首页
ios 利用runtime添加属性改变UITextField的光

ios 利用runtime添加属性改变UITextField的光

作者: 雪_晟 | 来源:发表于2017-06-27 12:00 被阅读673次

    下图是UITextField光标的起始位置。如果要改变UITextfield的光标的起始位置,我们只有重写它的方法- (CGRect)editingRectForBounds:(CGRect)bounds;可是,对于继承很不方便,扩展一个分类,可以修改UITextfield的光标位置是最方便不过。

    1.png

    利用runtime 为UITextfield添加一个属性,tintAjust,通过修改tintAjust可以修改编辑区域起始位置。不能重写上面的方法,可以利用UITextfield的leftview做文章,左边主要是一个透明的视图即可。

    @interface UITextField (TintAjust)
    @property(nonatomic,assign)CGFloat tintAjust; //扩展属性
    @end
    
    #import "UITextField+TintAjust.h"
    #import <objc/runtime.h>
    
    static NSString *adjust = @"adjust";
    @implementation UITextField (TintAjust)
    
    -(void)setTintAjust:(CGFloat )tintAjust{
        objc_setAssociatedObject(self, &adjust, @(tintAjust), OBJC_ASSOCIATION_ASSIGN);
        UILabel * leftView = [[UILabel alloc] initWithFrame:CGRectMake(tintAjust,0,tintAjust,self.frame.size.height)];
        leftView.backgroundColor = [UIColor clearColor];
        self.leftView = leftView;
        self.leftViewMode = UITextFieldViewModeAlways;
    }
    -(CGFloat)tintAjust{
        id  value = objc_getAssociatedObject(self, &adjust);
        return  [value floatValue ];
    }
    @end
    

    使用方法:textField.tintAjust = 30;

     UITextField *textField =[[UITextField alloc]initWithFrame:CGRectMake(20, 100, 200, 40)];
        textField.backgroundColor =[UIColor redColor];
        textField.borderStyle  = UITextBorderStyleNone;
        textField.placeholder = @"请选择";
        [self.view addSubview:textField];
        
        textField.tintAjust = 30;
        NSLog(@"%f",textField.tintAjust);
    

    效果图:


    2.png

    相关文章

      网友评论

          本文标题:ios 利用runtime添加属性改变UITextField的光

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