2013-04-10 3 views
10

Я провел достаточно много исследований, но не смог найти ответ на мой вопрос.Установить UIWebView Контент не перемещаться, когда отображается клавиатура

Предположим, у меня есть webView, в котором у меня есть текстовые поля, некоторые из них помещены в нижней части экрана, чтобы при появлении клавиатуры они должны были скрывать эти поля. После появления клавиатуры содержимое webView сместится, чтобы сделать видимыми поля. Проблема в том, что я не хочу, чтобы содержимое было развернуто.

Вопрос: Как отключить эту функцию webview или каким-либо образом сделать контент не прокруткой вверх. ???

Спасибо, любая помощь будет оценена.

ответ

0

Я думаю, this class должен помочь с вашей проблемой. Он прокручивает содержимое вверх, поэтому, если у вас есть текстовое поле в нижней части экрана, оно будет перемещаться над клавиатурой.

+1

Мне очень жаль, но вы не поняли мой вопрос. Я хочу, чтобы мое текстовое поле оставалось на месте, чтобы не двигаться вверх. – Garnik

0

Я нашел решение для меня. Я просто прокручиваю его снова после прокрутки. Сначала я ловлю уведомление UIKeyboardWillShowNotification путем добавления наблюдателя это [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; затем реализовать метод:

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

Это не то, что именно я просил, но помог мне решить мою проблему.

Спасибо.

16

Если вы хотите отключить ВСЕ прокрутку, включая автопрокрутку, когда вы перемещаетесь между полями формы, настройка webView.scrollView.scrollEnabled=NO не совсем охватывает все. Это останавливает обычную прокрутку прокрутки и перетаскивания, но не автоматическую прокрутку в полевых условиях при навигации по веб-форме.

Кроме того, наблюдая за UIKeyboardWillShowNotification позволит, когда клавиатура появляется вам предотвратить прокрутку , но это ничего не будет делать, если клавиатура уже вверх от редактирования другого поля формы.

Вот как предотвратить все прокрутки в три простых шага:

1) После создания UIWebView, отключить обычный скроллинг:

myWebView.scrollView.scrollEnabled = NO; 

2) Затем зарегистрировать контроллер представления как делегат Scrollview в:

myWebView.scrollView.delegate = self; 

(И убедитесь, добавить <UIScrollViewDelegate> к @interface определению вашего класса, чтобы предотвратить предупреждения компилятора)

3) Захват и отменить все события прокрутки:

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

Спасибо за интересную информацию, но на самом деле это не вопрос, кроме того, что я уже решил его с Javascript. – Garnik

+2

Я обнаружил, что это действительно ответ на ваш вопрос.Я бы предпочел, если бы вы разместили свое собственное решение. –

+0

это решение решает мой случай Мне нравится фраза «свернуть поле в прокрутку» –