// // IQTextView.m // https://github.com/hackiftekhar/IQKeyboardManager // Copyright (c) 2013-15 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #import "IQTextView.h" #import #import @interface IQTextView () -(void)refreshPlaceholder; @end @implementation IQTextView { UILabel *placeHolderLabel; } @synthesize placeholder = _placeholder; -(void)initialize { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshPlaceholder) name:UITextViewTextDidChangeNotification object:self]; } -(void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (instancetype)init { self = [super init]; if (self) { [self initialize]; } return self; } -(void)awakeFromNib { [super awakeFromNib]; [self initialize]; } -(void)refreshPlaceholder { if([[self text] length]) { [placeHolderLabel setAlpha:0]; } else { [placeHolderLabel setAlpha:1]; } [self setNeedsLayout]; [self layoutIfNeeded]; } - (void)setText:(NSString *)text { [super setText:text]; [self refreshPlaceholder]; } -(void)setFont:(UIFont *)font { [super setFont:font]; placeHolderLabel.font = self.font; [self setNeedsLayout]; [self layoutIfNeeded]; } -(void)layoutSubviews { [super layoutSubviews]; [placeHolderLabel sizeToFit]; placeHolderLabel.frame = CGRectMake(8, 8, CGRectGetWidth(self.frame)-16, CGRectGetHeight(placeHolderLabel.frame)); } -(void)setPlaceholder:(NSString *)placeholder { _placeholder = placeholder; if ( placeHolderLabel == nil ) { placeHolderLabel = [[UILabel alloc] init]; placeHolderLabel.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight); placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping; placeHolderLabel.numberOfLines = 0; placeHolderLabel.font = self.font; placeHolderLabel.backgroundColor = [UIColor clearColor]; placeHolderLabel.textColor = [UIColor colorWithWhite:0.7 alpha:1.0]; placeHolderLabel.alpha = 0; [self addSubview:placeHolderLabel]; } placeHolderLabel.text = self.placeholder; [self refreshPlaceholder]; } //When any text changes on textField, the delegate getter is called. At this time we refresh the textView's placeholder -(id)delegate { [self refreshPlaceholder]; return [super delegate]; } @end