2016-07-29 20 views
0

ステップ1: -
プレースホルダの目的のカスタムUITextViewを作成する方法c。?

#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ファイルのサブクラスUITextViewを持つクラスを作成し、KDPlaceHolderTextView

コピークラスの名前を入れて、KDPlaceHolderTextView.hにコードを貼り付け: -

このコードを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: - Goでは、ファイルをストーリーボードとviewcotrollerでUITexviewをドラッグして、クラスKDPlaceHolderTextView

を割り当て、属性インスペクタがプレースホルダのテキストや色、最終的

プロジェクトをビルドして実行を設定し表示します

答えて

0

これをチェックしてくださいGitHub

UITextViewインターフェイスでクラス名を(GCPlaceholderTextView)に変更するだけで済みます。

0

プレースホルダをtextViewに直接追加することはできませんが、UILabelを使用して同じことを行うことができます。

YourViewDidLoadに続いてUILabel

@property (weak, nonatomic) UILabel *placeholederLabel; 

のプロパティを取ります。

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; 
} 
} 
関連する問題