iphone uitextview

iphone - ¿Cómo insertar marcador de posición en UITextView?



(6)

Esta pregunta ya tiene una respuesta aquí:

¿Hay alguna manera de insertar un marcador de posición en un UITextView similar al UITextField ? En caso afirmativo, envíeme un enlace o alguna idea para implementar esta funcionalidad.


No es posible crear un marcador de posición en UITextView pero puede generar un efecto como un marcador de posición de esta manera.

- (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]; } }

O puede agregar etiqueta en vista de texto al igual que

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];

y establecer

- (void)textViewDidEndEditing:(UITextView *) textView { if (![textView hasText]) { lbl.hidden = NO; } } - (void) textViewDidChange:(UITextView *)textView { if(![textView hasText]) { lbl.hidden = NO; } else { lbl.hidden = YES; } }


Otra solución es poner un marcador de posición UITextView justo encima del UITextView real. Dale el mismo marco. Establezca placeholderTextView.enabled = NO para el marcador de posición TextView.

Luego, establezca el delegado solo para el textView normal y defina este método UITextViewDelegate:

- (void)textViewDidChange:(UITextView *)textView { NSLog(@"textViewDidChange"); if(self.textView.text.length == 0) { self.placeholderTextView.hidden = NO; } else { self.placeholderTextView.hidden = YES; } }


Otra solución fácil es configurar SÍ / NO para las propiedades ocultas de 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; } }


Otra solución fácil es simplemente agregar un UILabel a su subvista UITextView .

- (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]; } }

Incluso puedes agregar pequeñas animaciones para desvanecer / desvanecer la UILabel si eso es lo tuyo.

- (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; }]; }


Puede usar la función de abajo para hacer el marcador de posición. Utilizando esto, puede colocar el marcador de posición en él.

[self addTextViewPlaceholder:self.txtvComment withPlaceholder:@"COMMENT"]; -(void) addTextViewPlaceholder:(UITextView*) tView withPlaceholder:(NSString*) placeholder { UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(9,8,tView.bounds.size.width - 16,0)]; label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = 0; label.font = [UIFont systemFontOfSize:13.0]; label.backgroundColor = [UIColor clearColor]; label.textColor = [UIColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1.0]; label.text = placeholder; label.alpha = 1; label.tag = 999; [tView addSubview:label]; [label sizeToFit]; if(![tView.text isEqualToString:@""]) [label setAlpha:0]; [label release]; }

Puede administrar el texto de marcador de posición utilizando esto ...

- (void)textViewDidChange:(UITextView *)textView { [self textChange:textView]; } - (void)textChange:(UITextView *)textView { if([textView.text length]>0) [[textView viewWithTag:999] setAlpha:0]; else [[textView viewWithTag:999] setAlpha:1]; }


-(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; }