实现的效果如下:
1 #import <UIKit/UIKit.h> 2 3 @interface CustomTextView : UITextView 4 5 @property (nonatomic , strong) UILabel *placeHolderLabel; // 默认的Label 6 @property (nonatomic , strong) NSString *placeholderStr; // 默认的文字显示 7 @property (nonatomic , strong) UIColor *palceHolderColor; //默认文字显示的颜色 8 @end
1 #import "CustomTextView.h" 2 3 @implementation CustomTextView 4 5 - (instancetype)initWithFrame:(CGRect)frame{ 6 7 self = [super initWithFrame:frame]; 8 if (self) { 9 [self setPlaceholderStr:@""]; 10 [self setPalceHolderColor:[UIColor lightGrayColor]]; 11 12 } 13 return self; 14 } 15 16 // 接收数据 17 18 - (void)setPlaceholderStr:(NSString *)placeholderStr{ 19 20 if (_placeholderStr != placeholderStr) { 21 22 _placeholderStr = placeholderStr; 23 24 // 防止创建多个 25 26 [self.placeHolderLabel removeFromSuperview]; 27 self.placeHolderLabel = nil; 28 29 // 重新绘制 会调用drawRect方法 30 31 [self setNeedsDisplay]; 32 } 33 } 34 35 - (void)drawRect:(CGRect)rect{ 36 37 [super drawRect:rect]; 38 if (self.placeholderStr.length > 0) { 39 40 if (_placeHolderLabel == nil) { 41 _placeHolderLabel = [[UILabel alloc]initWithFrame:CGRectMake(8, 8, self.bounds.size.width - 16, 0)]; 42 _placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping; 43 _placeHolderLabel.numberOfLines = 0; 44 _placeHolderLabel.font = self.font; 45 _placeHolderLabel.backgroundColor = [UIColor clearColor]; 46 _placeHolderLabel.textColor = self.palceHolderColor; 47 _placeHolderLabel.alpha = 0; 48 _placeHolderLabel.tag = 999; 49 [self addSubview:_placeHolderLabel]; 50 } 51 _placeHolderLabel.text = self.placeholderStr; 52 53 //自适应宽高 54 [_placeHolderLabel sizeToFit]; 55 56 } 57 if ([[self text] length] == 0 && [[self placeholderStr] length] >0) { 58 [[self viewWithTag:999] setAlpha:1.0]; 59 } 60 61 }
使用如下:
1 #import "Button1Controller.h" 2 3 #import "CustomTextView.h" 4 5 #define kTextBorderColor RGBCOLOR(227,224,216) 6 #undef RGBCOLOR 7 #define RGBCOLOR(r,g,b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1] 8 9 10 @interface Button1Controller ()<UITextViewDelegate> 11 12 @property (nonatomic,strong) CustomTextView *textView; 13 @property (nonatomic , strong) UIButton *commitButton; 14 15 @end 16 17 @implementation Button1Controller 18 19 - (void)viewDidLoad { 20 [super viewDidLoad]; 21 22 self.view.backgroundColor = [UIColor colorWithRed:229.0/255 green:229.0/255 blue:229.0/255 alpha:1.0f]; 23 24 [self.view addSubview:self.textView]; 25 26 self.automaticallyAdjustsScrollViewInsets = NO; 27 28 [self.view addSubview:self.commitButton]; 29 30 31 } 32 33 34 // TextView 35 36 - (CustomTextView *)textView{ 37 38 if (!_textView) { 39 _textView = [[CustomTextView alloc]initWithFrame:CGRectMake(20, 84, self.view.frame.size.width - 40, 180)]; 40 _textView.backgroundColor = [UIColor whiteColor]; 41 _textView.delegate = self; 42 _textView.font = [UIFont systemFontOfSize:14.f]; 43 _textView.textColor = [UIColor blackColor]; 44 _textView.textAlignment = NSTextAlignmentLeft; 45 _textView.editable = YES; 46 _textView.layer.cornerRadius = 4.0f; 47 _textView.layer.borderColor = kTextBorderColor.CGColor; 48 _textView.layer.borderWidth = 0.5; 49 _textView.palceHolderColor = RGBCOLOR(0x89, 0x89, 0x89); 50 _textView.placeholderStr = @"请输入您的宝贵意见,我们会尽快处理!"; 51 } 52 53 return _textView; 54 55 56 } 57 58 // CommutButton 59 60 - (UIButton *)commitButton{ 61 62 if (!_commitButton) { 63 _commitButton = [UIButton buttonWithType:UIButtonTypeCustom]; 64 _commitButton.layer.cornerRadius = 2.0f; 65 _commitButton.frame = CGRectMake(40, CGRectGetMaxY(self.textView.frame)+20, self.view.frame.size.width - 80, 40); 66 _commitButton.backgroundColor = [self colorWithRGBHex:0x60cdf8]; 67 [_commitButton setTitle:@"提交" forState:UIControlStateNormal]; 68 [_commitButton addTarget:self action:@selector(sendFeedBack) forControlEvents:UIControlEventTouchUpInside]; 69 } 70 71 return _commitButton; 72 73 74 } 75 76 // 16进制转颜色 77 78 - (UIColor *)colorWithRGBHex:(UInt32)hex 79 { 80 int r = (hex >> 16) & 0xFF; 81 int g = (hex >> 8) & 0xFF; 82 int b = (hex) & 0xFF; 83 84 return [UIColor colorWithRed:r / 255.0f 85 green:g / 255.0f 86 blue:b / 255.0f 87 alpha:1.0f]; 88 } 89 90 // 提交按钮被点击 91 92 - (void)sendFeedBack{ 93 94 NSLog(@"提交..."); 95 96 } 97 98 // 判断如果用户输入 ,则收回键盘 99 100 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ 101 102 if ([text isEqualToString:@" "]) { 103 [textView resignFirstResponder]; 104 return NO; 105 } 106 return YES; 107 } 108 109 - (void)textViewDidBeginEditing:(UITextView *)textView{ 110 111 self.textView.placeholderStr = @""; 112 }