ios 利用runtime添加属性改变UITextField的光标起始位置

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

ios 利用runtime添加属性改变UITextField的光标起始位置_第1张图片
1.png

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

@interface UITextField (TintAjust)
@property(nonatomic,assign)CGFloat tintAjust; //扩展属性
@end
#import "UITextField+TintAjust.h"
#import 

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);

效果图:


ios 利用runtime添加属性改变UITextField的光标起始位置_第2张图片
2.png

你可能感兴趣的:(ios 利用runtime添加属性改变UITextField的光标起始位置)