首页 > 代码库 > 设计带有placeHolder的TextView

设计带有placeHolder的TextView

设计带有placeHolder的TextView

技术分享

效果:

技术分享

源码:

PlaceholderTextView.h 与 PlaceholderTextView.m

////  PlaceholderTextView.h//  YXTextView////  Created by YouXianMing on 14/12/23.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>@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 ()<UITextViewDelegate>@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

需要注意的一些细节:

技术分享

 

 

设计带有placeHolder的TextView