给TextView添加占位符
// // HYBTextView.h // // Created by huangyibiao on 14-6-3. // Copyright (c) 2014年 huangyibiao. All rights reserved. // #import <UIKit/UIKit.h> /*! * @brief 继承于UITextView,添加了placeholder支持,就像UITextField一样的拥有placeholder功能 * @author huangyibiao */ @interface HYBTextView : UITextView /*! * @brief 占位符文本,与UITextField的placeholder功能一致 */ @property (nonatomic, strong) NSString *placeholder; /*! * @brief 占位符文本颜色 */ @property (nonatomic, strong) UIColor *placeholderTextColor; @end
// // HYBTextView.m // HomeLinkProject // // Created by huangyibiao on 14-6-3. // Copyright (c) 2014年 huangyibiao. All rights reserved. // #import "HYBTextView.h" @interface HYBTextView () { BOOL _shouldDrawPlaceholder; } @end @implementation HYBTextView #pragma mark - 重写父类方法 - (void)setText:(NSString *)text { [super setText:text]; [self drawPlaceholder]; return; } - (void)setPlaceholder:(NSString *)placeholder { if (![placeholder isEqual:_placeholder]) { _placeholder = placeholder; [self drawPlaceholder]; } return; } #pragma mark - 父类方法 - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { [self configureBase]; } return self; } - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { [self configureBase]; } return self; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; if (_shouldDrawPlaceholder) { [_placeholderTextColor set]; [_placeholder drawInRect:CGRectMake(8.0f, 8.0f, self.frame.size.width - 16.0f, self.frame.size.height - 16.0f) withFont:self.font]; } return; } - (void)configureBase { [kNotificationCenter addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:self]; self.placeholderTextColor = [UIColor colorWithWhite:0.702f alpha:1.0f]; _shouldDrawPlaceholder = NO; return; } - (void)drawPlaceholder { BOOL prev = _shouldDrawPlaceholder; _shouldDrawPlaceholder = self.placeholder && self.placeholderTextColor && self.text.length == 0; if (prev != _shouldDrawPlaceholder) { [self setNeedsDisplay]; } return; } - (void)textChanged:(NSNotification *)notification { [self drawPlaceholder]; return; } - (void)dealloc { [kNotificationCenter removeObserver:self name:UITextViewTextDidChangeNotification object:nil]; return; } @end
最后更新:2017-04-03 05:39:42