iphone - ¿Cómo insertar marcador de posición en UITextView?
(6)
Esta pregunta ya tiene una respuesta aquí:
- Placeholder en UITextView 59 respuestas
¿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;
}