前段时间在项目中用到了UITextView,有个需求是要有placeholder,所以就自定义了一个希望能帮到大家.下面请看源码咯
.h文件
#import <UIKit/UIKit.h>
@interface JYTextView : UITextView
@property (nonatomic,copy)NSString *placeholder;
@property (nonatomic,strong) UIColor * placeholderColor;
@end
.m文件
#import "JYTextView.h"
@implementation JYTextView
- (void)awakeFromNib{
[self ezCustom];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]) {
[self ezCustom];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame textContainer:(NSTextContainer *)textContainer{
if (self = [super initWithFrame:frame textContainer:textContainer]) {
[self ezCustom];
}
return self;
}
- (instancetype)init{
if (self = [super init]) {
[self ezCustom];
}
return self;
}
-(instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self ezCustom];
}
return self;
}
- (void)ezCustom{
self.layer.cornerRadius = 8;
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:self];
}
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)setPlaceholder:(NSString *)placeholder
{
_placeholder = [placeholder copy];
[self setNeedsDisplay];
}
-(void)setPlaceholderColor:(UIColor *)placeholderColor
{
_placeholderColor = placeholderColor;
[self setNeedsDisplay];
}
-(void)setFont:(UIFont *)font
{
[super setFont:font];
[self setNeedsDisplay];
}
-(void)setText:(NSString *)text
{
[super setText:text];
[self setNeedsDisplay];
}
-(void)textDidChange
{
[self setNeedsDisplay];
}
-(void)drawRect:(CGRect)rect
{
if ([self hasText]) return;
NSMutableDictionary * attrs = [NSMutableDictionary dictionary];
attrs[NSForegroundColorAttributeName] = self.placeholderColor ? self.placeholderColor : [UIColor grayColor];
attrs[NSFontAttributeName] = self.font ? self.font : [UIFont systemFontOfSize:12];
CGFloat x = 5;
CGFloat y = 5;
CGFloat w = self.frame.size.width - 2 * x;
CGFloat h = self.frame.size.height - 2 * y;
CGRect placeholderRect = CGRectMake(x, y, w, h);
[self.placeholder drawInRect:placeholderRect withAttributes:attrs];
}
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
UIMenuController *menuController = [UIMenuController sharedMenuController];
if (menuController) {
[UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}
@end