2011-11-07 8 views
10

Tengo un problema extraño. Tengo 3 UITextField sy uno UITextView. Puedo pasar de un lado a UITextFieldUITextField por:UITextView: el texto comienza desde la segunda línea de vista de texto

- (BOOL) textFieldShouldReturn:(UITextField *)textField 
{ 
    NSInteger nextTag = textField.tag + 1; 
    //-- try to find next responde 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 

    if (nextResponder) 
    { 
     //-- found next responce ,so set it 
     [nextResponder becomeFirstResponder]; 
    } 
    else 
    { 
     [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
     //-- not found remove keyboard 
     [textField resignFirstResponder]; 
     return YES; 
    } 

    return YES; 
} 

Su todo funciona bien hasta que llega a UITexView, entonces mis cursor se mueve en la segunda línea de la vista de texto en lugar de la primera línea de vista de texto.

La vista de texto está tomada de IB.

El código para ver texto:

- (void) textViewDidBeginEditing:(UITextView *)textView 
{ 
    optionalText.hidden = YES ; 
    [scrollView setContentOffset:CGPointMake(0, textView.center.y-100) animated:YES]; 
} 

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{  
    // Any new character added is passed in as the "text" parameter 
    if ([text isEqualToString:@"\n"]) 
    { 
     // Be sure to test for equality using the "isEqualToString" message 
     [textView resignFirstResponder]; 
     [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 

     // Return FALSE so that the final '\n' character doesn't get added  
     if ([[commentTxtView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) 
     { 
      optionalText.hidden = NO ; 
      NSLog(@"Text View is null"); 
      [scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
     } 

     return FALSE; 
    } 

    return TRUE; 
} 

Se ve así:

enter image description here

¿Cuál podría ser el problema? ¿Por qué no comienza desde la primera línea de vista de texto?

+0

¿Qué es una vista de desplazamiento en este caso? Verificaría dos veces esta línea: [scrollView setContentOffset: CGPointMake (0, textView.center.y-100) animado: YES]; – Maggie

+0

¿Puede mostrarnos a dónde llama su método textFieldShouldReturn? Si lo llama como al principio del ciclo de vida de la vista, ya que tiene más de un campo de texto, la condición "if (nextResponder)" lo enviará automáticamente al siguiente textField. – shinyuX

Respuesta

29

Apuesto a que su textFieldShouldReturn: debe devolver NO en caso de que nextResponder sea su UITextField. En este momento siempre regresa YES, lo que significa que la clave probablemente se pasa al UITextView, que luego insertará la nueva línea.

+0

entonces ¿Cómo puedo resolverlo? En realidad lo resolví simplemente poniendo [textView becomeFirstResponder]; en el método textFieldShouldReturn cuando nextResponder no está disponible. Sé que solo importan las secuencias, ya que sé cuándo mi vista de texto es la última. – Maulik

3

para nadie viene en busca de Swift traducción 2.0 ...

En lugar de devolver true en textFieldShouldReturn después yourUIITextView.becomeFirstResponder(), volver false.

¡Funcionó para mí!

Espero que esto ayude!

+0

Gracias. Tu ahorraste mi tiempo +1 – tobeiosdev

Cuestiones relacionadas