第1步: -
创建子类UITextView的一类,把类的名称KDPlaceHolderTextView如何使用占位符目标c创建自定义UITextView?
复制并粘贴到KDPlaceHolderTextView.h代码文件
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface KDPlaceHolderTextView : UITextView
@property (nonatomic, retain) IBInspectable NSString *placeholder;
@property (nonatomic, retain) IBInspectable UIColor *placeholderColor;
/*!
This method is used to set the UITextView Notification and UitextField begin nitification to set the placeholder text
@param NSNotification to be a notification
@return void
*/
-(void)textChanged:(NSNotification*)notification;
@end
第2步: -
将此代码添加到KDPlaceHolderTextView.m文件中
#import "KDPlaceHolderTextView.h"
@interface KDPlaceHolderTextView()
@property (nonatomic, retain) UILabel *placeHolderLabel;
@end
@implementation KDPlaceHolderTextView
CGFloat const UI_PLACEHOLDER_TEXT_CHANGED_ANIMATION_DURATION = 0.25;
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)awakeFromNib
{
[super awakeFromNib];
// Use Interface Builder User Defined Runtime Attributes to set
// placeholder and placeholderColor in Interface Builder.
if (!self.placeholder) {
[self setPlaceholder:@""];
}
if (!self.placeholderColor) {
[self setPlaceholderColor:[UIColor lightGrayColor]];
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
}
/*!
This method is used to set the frame Placeholder lable
@param CGrect frame to be a frame
@return id
*/
- (id)initWithFrame:(CGRect)frame
{
if((self = [super initWithFrame:frame]))
{
[self setPlaceholder:@""];
[self setPlaceholderColor:[UI Color lightGrayColor]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
}
return self;
}
- (void)textChanged:(NSNotification *)notification
{
if([[self placeholder] length] == 0)
{
return;
}
[UIView animateWithDuration:UI_PLACEHOLDER_TEXT_CHANGED_ANIMATION_DURATION animations:^{
if([[self text] length] == 0)
{
[[self viewWithTag:999] setAlpha:1];
}
else
{
[[self viewWithTag:999] setAlpha:0];
}
}];
}
- (void)setText:(NSString *)text {
[super setText:text];
[self textChanged:nil];
}
/*!
This method is used to draw the rect in placeholder lable acording to amount of text
@param CGrect to be a rect
@return void
*/
- (void)drawRect:(CGRect)rect
{
if([[self placeholder] length] > 0)
{
if (_placeHolderLabel == nil)
{
_placeHolderLabel = [[UILabel alloc] initWithFrame:CGRectMake(8,8,self.bounds.size.width - 16,0)];
_placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping;
_placeHolderLabel.numberOfLines = 0;
_placeHolderLabel.font = self.font;
_placeHolderLabel.backgroundColor = [UIColor clearColor];
_placeHolderLabel.textColor = self.placeholderColor;
_placeHolderLabel.alpha = 0;
_placeHolderLabel.tag = 999;
[self addSubview:_placeHolderLabel];
}
_placeHolderLabel.text = self.placeholder;
[_placeHolderLabel sizeToFit];
[self sendSubviewToBack:_placeHolderLabel];
}
if([[self text] length] == 0 && [[self placeholder] length] > 0)
{
[[self viewWithTag:999] setAlpha:1];
}
[super drawRect:rect];
}
@end
步骤3: - 转至故事板文件,并在viewcotroller拖动UITexview并指定类KDPlaceHolderTextView
,看看属性检查器中设置的占位符文本或彩色
终于建立和运行项目