給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