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.
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;
}
}
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;
}];
}
Another easy solution is set YES/NO for hidden properties of placeholderLabel
- (void)textViewDidEndEditing:(UITextView *)theTextView
{
if (![textView hasText]) {
placeholderLabel.hidden = NO;
}
}
- (void) textViewDidChange:(UITextView *)textView
{
if(![textView hasText]) {
placeholderLabel.hidden = NO;
}
else{
placeholderLabel.hidden = YES;
}
}
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
// NSLog(@"REPlace %@ %d",text,range.location);
if(range.location==0 && ![text isEqualToString:@""])
{
placeholderlbl.hidden = YES;
}
else if(range.location==0)
{
placeholderlbl.hidden = NO;
}
return YES;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With