2012-11-16 11 views
7

Ho una visualizzazione Web che carica un client di chat web.IOS - Come evitare che la tastiera si nasconda quando uiwebview ricarica

Come ogni chat, la pagina ha un campo di testo per inserire il testo.

Il problema è che quando l'utente apre la tastiera viene automaticamente nascosto dopo un breve periodo di tempo a causa di diverse richieste Ajax che ricaricano la pagina. Questo diventa davvero fastidioso per l'utente in quanto non è in grado di inserire una frase completa prima che la tastiera si nasconda.

Non so perché, questo accade solo in iPhone 4S e iPhone 5. In iPhone 4, 3GS e Simulator tutto funziona correttamente.

Ho provato ad utilizzare shouldStartLoadWithRequest per catturare la richiesta e caricarlo dopo che l'utente si nasconde la tastiera, ma questo rovina la sessione di chat.

Ho provato a "sospendere" la richiesta con un thread di sospensione nello stesso metodo, ma si verifica nel thread principale in modo da bloccare l'intera applicazione.

C'è un modo per evitare semplicemente che la tastiera si nasconda?

risposta

-1

È possibile utilizzare il centro di notifica all'interno del vostro metodo di DidLoad di ascoltare quando la tastiera si nasconde in questo modo:

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(keyboardWillHide) 
             name:UIKeyboardWillHideNotification 
             object:nil]; 

- (void) keyboardWillHide{ 

    [webView becomeFirstResponder]; 
} 

che renderà la visualizzazione Web first responder e mostrare di nuovo la tastiera. Non ho provato io stesso modo speriamo che il trucco ..

+0

si fissa il problema lo stesso problema . Questo è sbagliato –

-1

se il campo di testo è in UIView

È possibile utilizzare il metodo Web View Delegato

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [textField becomeFirstResponder]; 
} 
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    [textField becomeFirstResponder]; 
} 

altrimenti se è in textField UIWebView quindi sostituisce textField con webView come mostrato di seguito.

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [webView becomeFirstResponder]; 
} 
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    [webView becomeFirstResponder]; 
} 
+0

questo non risponderà alla domanda. stai mostrando e nascondendo la tastiera ogni volta dopo il caricamento, che non è corretto –

7

Così, dopo una lunga ricerca ho trovato un modo per farlo, non è il massimo, ma mi ha aiutato molto.

Primo utilizzo DOM per verificare se il WebView firstResonder

- (BOOL)isWebViewFirstResponder 
{ 
    NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"document.activeElement.tagName"]; 
    if([[str lowercaseString]isEqualToString:@"input"]) { 
     return YES; 
    } 
    return NO; 
} 

poi rispondere a UIWebViewDelegate metodo shouldStartLoadWithRequest, e tornare NO se UIWebView è il primo risponditore

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    if([self isWebViewFirstResponder] && 
    navigationType != UIWebViewNavigationTypeFormSubmitted) { 
     return NO; 
    } else { 
     return YES; 
    } 
} 
+2

Penso che ragazzi in ShareKit dovrebbero farlo per "SHKOAuthView.h". Ho incontrato questo problema mentre autorizzavo a tumblr. –

+0

Ciao @NaloikoEugene assicurati di controllare anche & navigationType! = UIWebViewNavigationTypeFormSubmitted nel caso che l'utente tocchi fatto –

+2

Aveva lo stesso identico problema quando autorizzava Tumblr, la tua correzione mi ha aiutato molto, grazie @Basheer_CAD :) – Granit

Problemi correlati