2016-07-29 42 views
0

第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

,看看属性检查器中设置的占位符文本或彩色

终于建立和运行项目

回答

0

检查这在GitHub

你只需要在UITextView界面中将类名更改为(GCPlaceholderTextView)。

0

它不是直接可以在textView中添加占位符,但我们可以使用UILabel来做同样的事情。

采取的UILabel

@property (weak, nonatomic) UILabel *placeholederLabel; 
在YourViewDidLoad

随后的属性。

placeholederLabel = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 5.0,textView.frame.size.width - 30.0, 40.0)]; 


[placeholederLabel setText:@"Enter Your text here."]; 
[placeholederLabel setBackgroundColor:[UIColor clearColor]]; 
[placeholederLabel setTextColor:[UIColor yellowColor]]; 

[textView addSubview:placeholederLabel]; 

,然后写TextView的委托方法

- (void)textViewDidEndEditing:(UITextView *)theTextView 
{ 
    if (![textView hasText]) { 
    placeholederLabel.hidden = NO; 
} 
} 

- (void) textViewDidChange:(UITextView *)textView 
{ 
    if(![textView hasText]) { 
     placeholederLabel.hidden = NO; 
} 
else{ 
    placeholederLabel.hidden = YES; 
} 
} 
相关问题