首先需要创建一个类继承UITextField,然后重写 textRectForBounds,placeholderRectForBounds 和 editingRectForBounds 方法
@interface MyTextField : UITextField
/// 文本内容边距
@property (nonatomic, assign) CGFloat padding;
@end
// 控制文本的边距
- (CGRect)textRectForBounds:(CGRect)bounds {
if (self.padding > 0) {
return CGRectInset(bounds, self.padding, 0);
}
return bounds;
}
// 控制 placeHolder 的边距
- (CGRect)placeholderRectForBounds:(CGRect)bounds {
if (self.padding > 0) {
return CGRectInset(bounds, self.padding, 0);
}
return bounds;
}
// 控制编辑状态文本的边距
- (CGRect)editingRectForBounds:(CGRect)bounds {
if (self.padding > 0) {
return CGRectInset(bounds, self.padding, 0);
}
return bounds;
}
设置UITextField左右两侧的view,然后重写 leftViewRectForBounds 和 rightViewRectForBounds。
// 设置左侧视图
- (void)addLeftView:(UIView *)leftView {
self.leftView = leftView;
self.leftViewMode = UITextFieldViewModeAlways;
}
- (CGRect)leftViewRectForBounds:(CGRect)bounds {
if (self.leftView) {
return CGRectMake(0, 0, self.leftView.width, bounds.size.height);
}
return [super leftViewRectForBounds:bounds];
}
// 设置右侧视图
- (void)addRightView:(UIView *)rightView {
self.rightView = rightView;
self.rightViewMode = UITextFieldViewModeAlways;
}
- (CGRect)rightViewRectForBounds:(CGRect)bounds {
if (self.rightView) {
return CGRectMake(bounds.size.width-self.rightView.width, 0, self.rightView.width, bounds.size.height);
}
return [super rightViewRectForBounds:bounds];
}