How to insert placeholder in UITextView? [duplicate]
Is there any way to insert a placeholder in a UITextView
similar to the UITextField
? If yes, then please send me any link or any idea to implement this functionality.
Solution 1:
It is not possible to create placeholder in UITextView but you can generate effect like place holder by this.
- (void)viewDidLoad {
commentTxtView.text = @"Comment";
commentTxtView.textColor = [UIColor lightGrayColor];
commentTxtView.delegate = self;
}
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView {
commentTxtView.text = @"";
commentTxtView.textColor = [UIColor blackColor];
return YES;
}
-(void) textViewDidChange:(UITextView *)textView {
if(commentTxtView.text.length == 0) {
commentTxtView.textColor = [UIColor lightGrayColor];
commentTxtView.text = @"Comment";
[commentTxtView resignFirstResponder];
}
}
-(void) textViewShouldEndEditing:(UITextView *)textView {
if(commentTxtView.text.length == 0) {
commentTxtView.textColor = [UIColor lightGrayColor];
commentTxtView.text = @"Comment";
[commentTxtView resignFirstResponder];
}
}
OR you can add label in textview just like
lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,textView.frame.size.width - 10.0, 34.0)];
[lbl setText:kDescriptionPlaceholder];
[lbl setBackgroundColor:[UIColor clearColor]];
[lbl setTextColor:[UIColor lightGrayColor]];
textView.delegate = self;
[textView addSubview:lbl];
and set
- (void)textViewDidEndEditing:(UITextView *) textView {
if (![textView hasText]) {
lbl.hidden = NO;
}
}
- (void) textViewDidChange:(UITextView *)textView {
if(![textView hasText]) {
lbl.hidden = NO;
}
else {
lbl.hidden = YES;
}
}
Solution 2:
Another easy solution is to just add a UILabel
to your UITextView
subview.
- (void)viewDidLoad
{
[super viewDidLoad];
// you might have to play around a little with numbers in CGRectMake method
// they work fine with my settings
placeholderLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0, textView.frame.size.width - 20.0, 34.0)];
[placeholderLabel setText:kDescriptionPlaceholder];
// placeholderLabel is instance variable retained by view controller
[placeholderLabel setBackgroundColor:[UIColor clearColor]];
[placeholderLabel setFont:[challengeDescription font]];
[placeholderLabel setTextColor:[UIColor lightGrayColor]];
// textView is UITextView object you want add placeholder text to
[textView addSubview:placeholderLabel];
}
- (void) textViewDidChange:(UITextView *)theTextView
{
if(![textView hasText]) {
[textView addSubview:placeholderLabel];
} else if ([[textView subviews] containsObject:placeholderLabel]) {
[placeholderLabel removeFromSuperview];
}
}
- (void)textViewDidEndEditing:(UITextView *)theTextView
{
if (![textView hasText]) {
[textView addSubview:placeholderLabel];
}
}
You can even add little animations to fade in/out the UILabel
if that's your thing.
- (void) textViewDidChange:(UITextView *)theTextView
{
if(![textView hasText]) {
[textView addSubview:placeholderLabel];
[UIView animateWithDuration:0.15 animations:^{
placeholderLabel.alpha = 1.0;
}];
} else if ([[textView subviews] containsObject:placeholderLabel]) {
[UIView animateWithDuration:0.15 animations:^{
placeholderLabel.alpha = 0.0;
} completion:^(BOOL finished) {
[placeholderLabel removeFromSuperview];
}];
}
}
- (void)textViewDidEndEditing:(UITextView *)theTextView
{
if (![textView hasText]) {
[textView addSubview:placeholderLabel];
[UIView animateWithDuration:0.15 animations:^{
placeholderLabel.alpha = 1.0;
}];
}