这是我的第一篇文章,好激动,如果有写的不好的地方请大家多多包涵,有不对的地方也请指出,谢谢~
正常情况下UITextField的rightView和clearView是不能同时出现的,你会发现设置了一个另一个就不见了,这里让他们两个同时出现,其实也不是同时出现,而是修改了leftView的位置,将leftView的位置移动到rigthView的位置,但是效果是一样的,话不多说,看代码
重写UITextField的方法,修改leftView的位置
我们新建一个类继承UITextField
这是代码
#import "LoginTextField.h"
@implementation LoginTextField
//文本框 显示 时的 位置 及 显示范围
- (CGRect)textRectForBounds:(CGRect)bounds
{
// return CGRectInset(bounds, -10, 0);
CGRect rect = [super textRectForBounds:bounds];
return CGRectMake(30, rect.origin.y, rect.size.width + 100 , rect.size.height);
}
//文本框 编辑 时的 位置 及 显示范围
- (CGRect)editingRectForBounds:(CGRect)bounds
{
CGRect rect = [super editingRectForBounds:bounds];
return CGRectMake(30, rect.origin.y, rect.size.width + 100 , rect.size.height);
}
//文本框 清除按钮 的 位置 及 显示范围
- (CGRect)clearButtonRectForBounds:(CGRect)bounds
{
CGRect rect = [super clearButtonRectForBounds:bounds];
return CGRectOffset(rect, -50, 0);
}
//文本框 左视图 的 位置 及 显示范围
- (CGRect)leftViewRectForBounds:(CGRect)bounds
{
CGRect rect = [super leftViewRectForBounds:bounds];
return CGRectOffset(rect, [UIScreen mainScreen].bounds.size.width - 50, 0);
}
@end
在使用他的时候我们就直接初始化就好了
#import "ViewController.h"
#import <Masonry/Masonry.h>
#import "LoginTextField.h"
@implementation ViewController
- (void)viewDidLoad
{
self.view.backgroundColor = [UIColor colorWithRed:150/255.0 green:222/255.0 blue:125/255.0 alpha:1.0];
LoginTextField * field1 = [LoginTextField new];
field1.clearButtonMode = UITextFieldViewModeAlways;
field1.leftViewMode = UITextFieldViewModeAlways;
field1.backgroundColor = [UIColor lightGrayColor];
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hp_more"]];
imgView.frame = CGRectMake(0, 0, 50, 50);
[imgView setUserInteractionEnabled:YES];
//我们可以给后面的图片加上点击事件
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tableView)];
field1.leftView = imgView;
[imgView addGestureRecognizer:tap];
[self.view addSubview:field1];
[field1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.offset(50);
make.left.offset(0);
make.width.offset(self.view.bounds.size.width);
make.height.offset(50);
}];
}
运行效果如下
Simulator Screen Shot 2017年3月23日 下午10.28.21.png我设置的编辑区域很小,所以就是这么长一点,具体看代码;现在rightView和clearView是不是都可以使用了,怎么样,是不是很简单,希望大家喜欢~
网友评论