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