//
// 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