设计带有placeHolder的TextView
效果:
源码:
PlaceholderTextView.h 与 PlaceholderTextView.m
//// PlaceholderTextView.h// YXTextView//// Created by YouXianMing on 14/12/23.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import@interface PlaceholderTextView : UIView// 获取的字符串@property (nonatomic, strong, readonly) NSString *string;// textView@property (nonatomic, strong) UITextView *textView;// 占位字符@property (nonatomic, strong) NSString *placeHolderString;// 文本边缘留白@property(nonatomic, assign) UIEdgeInsets textContainerInset;// 颜色设置@property (nonatomic, strong) UIColor *editTextColor;@property (nonatomic, strong) UIColor *placeHolderColor;// 返回键是否用来做取消第一响应者@property (nonatomic, assign) BOOL returnButtonToResignFirstResponder;// 取消第一响应者- (void)resignTextViewFirstResponder;@end
//// PlaceholderTextView.m// YXTextView//// Created by YouXianMing on 14/12/23.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "PlaceholderTextView.h"@interface PlaceholderTextView ()@property (nonatomic, strong) NSString *string;@end@implementation PlaceholderTextView- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self createTextView]; } return self;}- (void)createTextView { self.textView = [[UITextView alloc] initWithFrame:self.bounds]; self.textView.delegate = self; self.textView.backgroundColor = [UIColor clearColor]; self.textView.textColor = [UIColor grayColor]; [self addSubview:self.textView];}#pragma mark - 代理方法- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { // 设置编辑状态文字颜色 textView.textColor = (self.editTextColor == nil ? [UIColor blackColor] : self.editTextColor); // 如果文字为placeHolder文字 if ([textView.text isEqualToString:self.placeHolderString]) { textView.text = @""; } return YES;}- (BOOL)textViewShouldEndEditing:(UITextView *)textView { // 如果长度为0,则显示placeHolder文字 if (textView.text.length == 0) { textView.text = self.placeHolderString; textView.textColor = (self.placeHolderColor == nil ? [UIColor grayColor] : self.placeHolderColor); } return YES;}- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (_returnButtonToResignFirstResponder == YES) { if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } } return YES;}- (void)resignTextViewFirstResponder { [self.textView resignFirstResponder];}#pragma mark - 重写setter,getter方法@synthesize string = _string;- (NSString *)string { if ([self.textView.text isEqualToString:self.placeHolderString]) { return @""; } else { return self.textView.text; }}@synthesize placeHolderColor = _placeHolderColor;- (void)setPlaceHolderColor:(UIColor *)placeHolderColor { _placeHolderColor = placeHolderColor; self.textView.textColor = _placeHolderColor;}- (UIColor *)placeHolderColor { return _placeHolderColor;}@synthesize placeHolderString = _placeHolderString;- (void)setPlaceHolderString:(NSString *)placeHolderString { _placeHolderString = placeHolderString; _textView.text = placeHolderString;}- (NSString *)placeHolderString { return _placeHolderString;}@synthesize textContainerInset = _textContainerInset;- (void)setTextContainerInset:(UIEdgeInsets)textContainerInset { _textContainerInset = textContainerInset; _textView.textContainerInset = textContainerInset;}- (UIEdgeInsets)textContainerInset { return _textContainerInset;}@end
控制器源码:
//// ViewController.m// YXTextView//// Created by YouXianMing on 14/12/23.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "PlaceholderTextView.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; PlaceholderTextView *textView = [[PlaceholderTextView alloc] initWithFrame:CGRectMake(-1, 100, 322, 100)]; [self.view addSubview:textView]; textView.layer.borderWidth = 1.f; textView.layer.borderColor = [UIColor purpleColor].CGColor; textView.returnButtonToResignFirstResponder = YES; textView.textView.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:22.f]; textView.placeHolderColor = [UIColor cyanColor]; textView.editTextColor = [UIColor redColor]; textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10); textView.placeHolderString = @"Input your name, please...";}@end
需要注意的一些细节: