您的位置:首页 > 其它

textView实现placehodle

2016-07-13 17:47 387 查看
.H文件里面需要实现:
#import <UIKit/UIKit.h>
@interface UIPHTextView :
UITextView
{
    NSString *placeholder;
    UIColor *placeholderColor;
    @private
    UILabel *placeHolderLabel;
}
@property(nonatomic,
retain) UILabel *placeHolderLabel;
@property(nonatomic,
retain) NSString *placeholder;
@property(nonatomic,
retain) UIColor *placeholderColor;
-(void)textChanged:(NSNotification*)notification;
@end

.M需要实现:

#import "UIPHTextView.h"
@implementation UIPHTextView
- (instancetype)init{
    self = [super init];
    if (self) {
        [super awakeFromNib];
        [self setPlaceholder:@""];
        [self setPlaceholderColor:[UIColor lightGrayColor]];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification
object:nil];
    }
    return
self;
}
- (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;
    }
    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 =
UILineBreakModeWordWrap;
            placeHolderLabel.numberOfLines =
0;
            placeHolderLabel.font = [UIFont
systemFontOfSize:14];
            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

ViewController.m里面需要实现:

#import "ViewController.h"
#import "UIPHTextView.h"
@interface ViewController ()<UITextViewDelegate>
{
    UIView *_bgView;
    UIPHTextView *_textView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
    [super
viewDidLoad];
    [self
_createView];
}
- (void)_createView{
    if (_bgView ==
nil) {
        _bgView = [[UIView
alloc]initWithFrame:CGRectMake(0,
10, self.view.frame.size.width,
200)];
        _bgView.backgroundColor = [UIColor
greenColor];
        [self.view
addSubview:_bgView];
    }
    _textView = [[UIPHTextView
alloc] initWithFrame:CGRectMake(5,
5, self.view.frame.size.width
- 10, 200 -
85)];
    _textView.placeholder =
@"说点什么...";
    _textView.font = [UIFont
systemFontOfSize:15];
    _textView.delegate =
self;
    _textView.showsVerticalScrollIndicator =
NO;
    _textView.placeholderColor = [UIColor
grayColor];
    [_bgView
addSubview:_textView];
}
- (void)didReceiveMemoryWarning {
    [super
didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: