UITextView 实现placeholder的方法

作者: 阿黎转呀转 | 来源:发表于2016-07-29 14:45 被阅读252次

在UITextField中自带placeholder属性,可以用于提示输入框信息。但是UITextView并不具备此功能

介绍两种方法来实现:

第一种:

初始化UITextView

//首先定义UITextView

UITextView *textView = [[UITextView alloc] init];  
textView.font = [UIFont systemFontOfSize:14];  
textView.frame =CGRectMake(10, 0, cell.contentView.bounds.size.width-20, side);  
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;  
textView.backgroundColor = [UIColor whiteColor];  
[cell.contentView addSubview:textView];  
textView.hidden = NO;  
textView.delegate = self;  

//其次在UITextView上面覆盖个UILable,UILable设置为全局变量。

uilabel.frame =CGRectMake(17, 8, cell.contentView.bounds.size.width - side+10, 20);  
uilabel.text = @"请填写审批意见...";  
uilabel.enabled = NO;//lable必须设置为不可用  
uilabel.backgroundColor = [UIColor clearColor];  
[cell.contentView addSubview:uilabel];  

实现UITextView的代理

-(void)textViewDidChange:(UITextView *)textView  
{  
    self.examineText =  textView.text;  
    if (textView.text.length == 0) {  
        uilabel.text = @"请填写审批意见...";  
    }else{  
        uilabel.text = @"";  
    }  
} 

第二种:

UITextView 实现 placeholder 及隐藏键盘

#import <Foundation/Foundation.h>

@interface UIPlaceHolderTextView : 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

 

#import "UIPlaceHolderTextView.h"

@implementation UIPlaceHolderTextView

@synthesize placeHolderLabel;

@synthesize placeholder;

@synthesize placeholderColor;

 

- (void)dealloc

{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

    [placeHolderLabel release]; placeHolderLabel = nil;

    [placeholderColor release]; placeholderColor = nil;

    [placeholder release]; placeholder = nil;

    [super dealloc];

}

 

- (void)awakeFromNib

{

    [super awakeFromNib];

    [self setPlaceholder:@""];

    [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;

    }

    

    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 = 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

 

 

//隐藏键盘,实现UITextViewDelegate

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text  

{  

    if ([text isEqualToString:@"\n"]) {  

        [m_textView resignFirstResponder];   

        return NO;  

    }  

    return YES;  

}

原文链接:http://www.cnblogs.com/easonoutlook/archive/2012/12/28/2837665.html

相关文章

网友评论

    本文标题:UITextView 实现placeholder的方法

    本文链接:https://www.haomeiwen.com/subject/asszjttx.html