UITextView实现Placeholder功能

来源:互联网 发布:网络任务赚钱平台 编辑:程序博客网 时间:2024/05/09 18:20

在ios中我们UITextField有Placeholder的功能,但是UITextView却没有这个方法,有时候我们也需要实现这样的Placeholder功能,StackOverFlow给我们提供了一个重写UITextView的方法,少量代码就实现了这个功能,值得学习一下。。

#import <UIKit/UIKit.h>@interface UIPlaceHolderTextView : UITextView@property (nonatomic, retain) NSString *placeholder;@property (nonatomic, retain) UIColor *placeholderColor;-(void)textChanged:(NSNotification*)notification;@end

#import "UIPlaceHolderTextView.h"@interface UIPlaceHolderTextView ()@property (nonatomic, retain) UILabel *placeHolderLabel;@end@implementation UIPlaceHolderTextViewCGFloat const UI_PLACEHOLDER_TEXT_CHANGED_ANIMATION_DURATION = 0.25;- (void)dealloc{    [[NSNotificationCenter defaultCenter] removeObserver:self];#if __has_feature(objc_arc)#else    [_placeHolderLabel release]; _placeHolderLabel = nil;    [_placeholderColor release]; _placeholderColor = nil;    [_placeholder release]; _placeholder = nil;    [super dealloc];#endif}- (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];}- (id)initWithFrame:(CGRect)frame{    if( (self = [super initWithFrame:frame]) )    {        [self setPlaceholder:@""];        [self setPlaceholderColor:[UIColor 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];}- (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




0 0
原创粉丝点击