2011-11-07 15 views
10

Ho uno strano problema. Ho 3 UITextField s e uno UITextView. Posso passare da un UITextField al prossimo UITextField da:UITextView: il testo inizia dalla seconda riga del testo

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

E 'tutto funziona bene fino a quando si tratta di UITexView, allora i miei cursore si sposta a seconda riga della visualizzazione di testo al posto di 1 ° linea di vista del testo.

La visualizzazione del testo è presa da IB.

Il codice per la visualizzazione del testo:

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

Ecco come si presenta:

enter image description here

Quale potrebbe essere il problema? Perché non inizia dalla prima riga della visualizzazione del testo?

+0

cos'è una vista a scorrimento in questo caso? Vorrei ricontrollare questa riga: [scrollView setContentOffset: CGPointMake (0, textView.center.y-100) animato: YES]; – Maggie

+0

Puoi mostrarci dove chiami il metodo textFieldShouldReturn? Se la chiami come all'inizio del ciclo di vita della vista, dato che hai più di un campo di testo, la condizione "if (nextResponder)" ti invierà automaticamente al campo di testo successivo. – shinyuX

risposta

29

Scommetto che il tuo textFieldShouldReturn: deve restituire NO nel caso in cui lo nextResponder sia il tuo UITextField. In questo momento stai sempre restituendo YES, il che significa che probabilmente la chiave verrà passata allo UITextView, che inserirà quindi la nuova riga.

+0

quindi Come posso risolverlo? In realtà l'ho risolto mettendo semplicemente [textView becomeFirstResponder]; nel metodo textFieldShouldReturn quando nextResponder non è disponibile. So che si tratta solo di sequenze come so quando la mia vista testuale è l'ultima. – Maulik

3

per nessuno venire in cerca di Swift traduzione 2.0 ...

Invece di tornare in truetextFieldShouldReturn dopo yourUIITextView.becomeFirstResponder(), tornare false.

Ha funzionato per me!

Spero che questo aiuti!

+0

Grazie. Hai salvato il mio tempo +1 – tobeiosdev

Problemi correlati