| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- //
- // CustomTextField.m
- // 千模
- //
- // Created by MUMEI on 2018/6/25.
- // Copyright © 2018年 MUMEI. All rights reserved.
- //
- #import "CustomTextField.h"
- @implementation CustomTextField
- {
- //坐标
- CGRect _frame;
- //用label显示内容
- UILabel *_label;
- //是否显示清空按钮
- BOOL _clear;
- //设置leftView
- UIView *_leftView;
- //设置字号
- CGFloat _fontSize;
- }
- /**
- * 自定义初始化方法
- *
- * @param frame frame
- * @param placeholder 提示语
- * @param clear 是否显示清空按钮 YES为显示
- * @param view 是否设置leftView不设置传nil
- * @param font 设置字号
- *
- * @return
- */
- -(id)initWithFrame:(CGRect)frame placeholder:(NSString *)placeholder clear:(BOOL)clear leftView:(id)view fontSize:(CGFloat)font
- {
- self = [super initWithFrame:frame];
- if (self) {
- _frame = frame;
- _clear = clear;
- _leftView = (UIView *)view;
- _fontSize = font;
- self.placeholder = placeholder;
- self.textColor = [UIColor clearColor];
- self.font = [UIFont systemFontOfSize:_fontSize];
- self.delegate = self;
- if (clear) {
- self.clearButtonMode = UITextFieldViewModeAlways;
- }
- if (view) {
- self.leftView = view;
- self.leftViewMode = UITextFieldViewModeAlways;
- }
- [self createLabel];
- [self addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- }
- return self;
- }
- /**
- * 监听textField内容的改变
- *
- * @param sender
- */
- - (void) textFieldDidChange:(id) sender {
- UITextField *textField = (UITextField *)sender;
-
- CGSize size = [self labelText:[NSString stringWithFormat:@"%@|",textField.text] fondSize:_fontSize width:_label.frame.size.width];
- _label.frame = CGRectMake(_label.frame.origin.x, _label.frame.origin.y, _label.frame.size.width, size.height < _frame.size.height ? _frame.size.height : size.height);
- self.frame = CGRectMake(_frame.origin.x, _frame.origin.y, _frame.size.width, size.height < _frame.size.height ? _frame.size.height : size.height);
-
- if (textField.text.length == 0) {
- _label.text = @"";
- self.tintColor=[UIColor blueColor];
- }else{
- //添加一个假的光标
- self.tintColor=[UIColor clearColor];
- NSString *text = [NSString stringWithFormat:@"%@|",textField.text];
- NSMutableAttributedString *attString = [[NSMutableAttributedString alloc]initWithString:text];
- [attString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(text.length - 1, 1)];
- _label.attributedText = attString;
- }
- }
- /**
- * 创建label
- */
- -(void)createLabel
- {
- _label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, _frame.size.width, _frame.size.height)];
- if (_leftView) {
- _label.frame = CGRectMake(_leftView.frame.size.width, _label.frame.origin.y, _label.frame.size.width-_leftView.frame.size.width, _label.frame.size.height);
- }
- if (_clear) {
- _label.frame = CGRectMake(_label.frame.origin.x, _label.frame.origin.y, _label.frame.size.width-20, _label.frame.size.height);
- }
- _label.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0];
- _label.font = [UIFont systemFontOfSize:_fontSize];
- _label.numberOfLines = 0;
- [self addSubview:_label];
- }
- #pragma mark - UITextFieldDelegate
- //点击return回收键盘
- -(BOOL)textFieldShouldReturn:(UITextField *)textField
- {
- [textField resignFirstResponder];
- return YES;
- }
- //开始编辑
- - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
- {
- NSLog(@"将要编辑");
- return YES;
- }
- //开始编辑
- - (void)textFieldDidBeginEditing:(UITextField *)textField
- {
- NSLog(@"开始编辑");
- }
- //将要编辑完成
- - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
- {
- NSLog(@"将要编辑完成");
- return YES;
- }
- //编辑完成
- - (void)textFieldDidEndEditing:(UITextField *)textField
- {
- NSLog(@"编辑完成");
- }
- //点击键盘调用
- - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
- {
- NSLog(@"点击键盘调用");
- return YES;
- }
- //点击清空按钮
- - (BOOL)textFieldShouldClear:(UITextField *)textField
- {
- NSLog(@"清空");
- _label.text = @"";
- return YES;
- }
- /**
- * 计算字符串长度,UILabel自适应高度
- *
- * @param text 需要计算的字符串
- * @param size 字号大小
- * @param width 最大宽度
- *
- * @return 返回大小
- */
- -(CGSize)labelText:(NSString *)text fondSize:(float)size width:(CGFloat)width
- {
- NSDictionary *send = @{NSFontAttributeName: [UIFont systemFontOfSize:size]};
- CGSize textSize = [text boundingRectWithSize:CGSizeMake(width, 0)
- options:NSStringDrawingTruncatesLastVisibleLine |
- NSStringDrawingUsesLineFragmentOrigin |
- NSStringDrawingUsesFontLeading
- attributes:send context:nil].size;
-
- return textSize;
- }
- @end
|