CustomTextField.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //
  2. // CustomTextField.m
  3. // 千模
  4. //
  5. // Created by MUMEI on 2018/6/25.
  6. // Copyright © 2018年 MUMEI. All rights reserved.
  7. //
  8. #import "CustomTextField.h"
  9. @implementation CustomTextField
  10. {
  11. //坐标
  12. CGRect _frame;
  13. //用label显示内容
  14. UILabel *_label;
  15. //是否显示清空按钮
  16. BOOL _clear;
  17. //设置leftView
  18. UIView *_leftView;
  19. //设置字号
  20. CGFloat _fontSize;
  21. }
  22. /**
  23. * 自定义初始化方法
  24. *
  25. * @param frame frame
  26. * @param placeholder 提示语
  27. * @param clear 是否显示清空按钮 YES为显示
  28. * @param view 是否设置leftView不设置传nil
  29. * @param font 设置字号
  30. *
  31. * @return
  32. */
  33. -(id)initWithFrame:(CGRect)frame placeholder:(NSString *)placeholder clear:(BOOL)clear leftView:(id)view fontSize:(CGFloat)font
  34. {
  35. self = [super initWithFrame:frame];
  36. if (self) {
  37. _frame = frame;
  38. _clear = clear;
  39. _leftView = (UIView *)view;
  40. _fontSize = font;
  41. self.placeholder = placeholder;
  42. self.textColor = [UIColor clearColor];
  43. self.font = [UIFont systemFontOfSize:_fontSize];
  44. self.delegate = self;
  45. if (clear) {
  46. self.clearButtonMode = UITextFieldViewModeAlways;
  47. }
  48. if (view) {
  49. self.leftView = view;
  50. self.leftViewMode = UITextFieldViewModeAlways;
  51. }
  52. [self createLabel];
  53. [self addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
  54. }
  55. return self;
  56. }
  57. /**
  58. * 监听textField内容的改变
  59. *
  60. * @param sender
  61. */
  62. - (void) textFieldDidChange:(id) sender {
  63. UITextField *textField = (UITextField *)sender;
  64. CGSize size = [self labelText:[NSString stringWithFormat:@"%@|",textField.text] fondSize:_fontSize width:_label.frame.size.width];
  65. _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);
  66. self.frame = CGRectMake(_frame.origin.x, _frame.origin.y, _frame.size.width, size.height < _frame.size.height ? _frame.size.height : size.height);
  67. if (textField.text.length == 0) {
  68. _label.text = @"";
  69. self.tintColor=[UIColor blueColor];
  70. }else{
  71. //添加一个假的光标
  72. self.tintColor=[UIColor clearColor];
  73. NSString *text = [NSString stringWithFormat:@"%@|",textField.text];
  74. NSMutableAttributedString *attString = [[NSMutableAttributedString alloc]initWithString:text];
  75. [attString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(text.length - 1, 1)];
  76. _label.attributedText = attString;
  77. }
  78. }
  79. /**
  80. * 创建label
  81. */
  82. -(void)createLabel
  83. {
  84. _label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, _frame.size.width, _frame.size.height)];
  85. if (_leftView) {
  86. _label.frame = CGRectMake(_leftView.frame.size.width, _label.frame.origin.y, _label.frame.size.width-_leftView.frame.size.width, _label.frame.size.height);
  87. }
  88. if (_clear) {
  89. _label.frame = CGRectMake(_label.frame.origin.x, _label.frame.origin.y, _label.frame.size.width-20, _label.frame.size.height);
  90. }
  91. _label.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0];
  92. _label.font = [UIFont systemFontOfSize:_fontSize];
  93. _label.numberOfLines = 0;
  94. [self addSubview:_label];
  95. }
  96. #pragma mark - UITextFieldDelegate
  97. //点击return回收键盘
  98. -(BOOL)textFieldShouldReturn:(UITextField *)textField
  99. {
  100. [textField resignFirstResponder];
  101. return YES;
  102. }
  103. //开始编辑
  104. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
  105. {
  106. NSLog(@"将要编辑");
  107. return YES;
  108. }
  109. //开始编辑
  110. - (void)textFieldDidBeginEditing:(UITextField *)textField
  111. {
  112. NSLog(@"开始编辑");
  113. }
  114. //将要编辑完成
  115. - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
  116. {
  117. NSLog(@"将要编辑完成");
  118. return YES;
  119. }
  120. //编辑完成
  121. - (void)textFieldDidEndEditing:(UITextField *)textField
  122. {
  123. NSLog(@"编辑完成");
  124. }
  125. //点击键盘调用
  126. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  127. {
  128. NSLog(@"点击键盘调用");
  129. return YES;
  130. }
  131. //点击清空按钮
  132. - (BOOL)textFieldShouldClear:(UITextField *)textField
  133. {
  134. NSLog(@"清空");
  135. _label.text = @"";
  136. return YES;
  137. }
  138. /**
  139. * 计算字符串长度,UILabel自适应高度
  140. *
  141. * @param text 需要计算的字符串
  142. * @param size 字号大小
  143. * @param width 最大宽度
  144. *
  145. * @return 返回大小
  146. */
  147. -(CGSize)labelText:(NSString *)text fondSize:(float)size width:(CGFloat)width
  148. {
  149. NSDictionary *send = @{NSFontAttributeName: [UIFont systemFontOfSize:size]};
  150. CGSize textSize = [text boundingRectWithSize:CGSizeMake(width, 0)
  151. options:NSStringDrawingTruncatesLastVisibleLine |
  152. NSStringDrawingUsesLineFragmentOrigin |
  153. NSStringDrawingUsesFontLeading
  154. attributes:send context:nil].size;
  155. return textSize;
  156. }
  157. @end