2013-04-10 14 views
10

Ho fatto ricerche abbastanza ampie ma non ho trovato risposta alla mia domanda.Imposta contenuto UIWebView per non spostarsi quando viene mostrata la tastiera

Supponiamo di avere un webView in cui sono presenti alcuni campi di testo, alcuni dei quali sono posizionati nella parte inferiore dello schermo in modo che quando appare la tastiera si nascondano quei campi. Dopo la tastiera appare il contenuto di webView per rendere visibili quei campi. Il problema è che I NON desidera che il contenuto scivoli verso l'alto.

La domanda è: come posso disabilitare quella funzione di webview, o in qualche modo rendere il contenuto non scorrere verso l'alto ???

Grazie, qualsiasi aiuto sarebbe apprezzato.

risposta

0

Penso che this class dovrebbe aiutare con il tuo problema. Scorre il contenuto verso l'alto, quindi se hai un campo di testo nella parte inferiore dello schermo, lo sposterà sopra la tastiera.

+1

Mi dispiace ma non ho capito la mia domanda. Voglio che il mio campo di testo rimanga su di esso, non per salire. – Garnik

0

Ho trovato la soluzione per me. Lo faccio scorrere di nuovo verso il basso dopo averlo fatto scorrere verso l'alto. Per prima cosa prendere notifica UIKeyboardWillShowNotification con l'aggiunta di osservatore ad esso [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; quindi implementare il metodo:

-(void)keyboardWillShow:(NSNotification*)aNotification{ 
NSDictionary* info = [aNotification userInfo]; 
float kbHeight = [[NSNumber numberWithFloat:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.height]floatValue]; 
float kbWidth = [[NSNumber numberWithFloat:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.width]floatValue]; 
BOOL keyboardIsVisible=[self UIKeyboardIsVisible]; 
//Check orientation and scroll down webview content by keyboard size 
if(kbWidth==[UIScreen mainScreen].bounds.size.width){ 
    if (!keyboardIsVisible) { 
     [[chatView scrollView] setContentOffset:CGPointMake(0, -kbHeight+10) animated:YES]; 
    } //If is landscape content scroll up is about 113 px so need to scroll down by 113 
}else if (kbHeight==[UIScreen mainScreen].bounds.size.height){ 
    if (!keyboardIsVisible) { 
     [[chatView scrollView] setContentOffset:CGPointMake(0, -113) animated:YES]; 
    } 
} 
} 

Questo non è esattamente quello che ho chiesto, ma mi ha aiutato a risolvere il mio problema.

Grazie.

16

Se si desidera disabilitare TUTTO lo scorrimento, incluso lo scorrimento automatico quando si naviga tra i campi modulo, l'impostazione webView.scrollView.scrollEnabled=NO non copre completamente tutto. Ciò interrompe il normale scorrimento con trascinamento della selezione, ma non lo scorrimento automatico della vista in campo aperto quando si naviga in un modulo Web.

Inoltre, guardando per UIKeyboardWillShowNotification vi permetterà di prevenire lo scorrimento quando viene visualizzata la tastiera, ma che non farà nulla se la tastiera è già in piedi da modificare un diverso campo di modulo.

Ecco come prevenire tutti lo scorrimento in tre semplici passi:

1) dopo aver creato l'UIWebView, disabilitare normale scorrimento:

myWebView.scrollView.scrollEnabled = NO; 

2) Quindi registrare il controller della vista come il delegato di ScrollView:

myWebView.scrollView.delegate = self; 

(E assicurarsi di aggiungi <UIScrollViewDelegate> la definizione di vostra classe @interface per evitare avvisi del compilatore)

3) Cattura e annullare tutti gli eventi di scorrimento:

// UIScrollViewDelegate method 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    scrollView.bounds = myWebView.bounds; 
} 
+1

Grazie per le informazioni interessanti ma in realtà non riguarda la domanda, oltre a ciò che ho già risolto da Javascript. – Garnik

+2

Ho scoperto che è davvero una risposta alla tua domanda.Preferirei se pubblichi la tua soluzione. –

+0

questa soluzione risolve il mio caso mi piace la frase "scorrimento in-view-field-view" –