Прокрутка UIWebView после фокуса текстового поля - PullRequest
6 голосов
/ 29 августа 2011

У меня есть UIView и UIWebView на экране. Когда я нажимаю на текстовое поле на веб-сайте, содержимое веб-просмотра увеличивается. Как я мог заставить UIView двигаться тогда?

Ответы [ 5 ]

7 голосов
/ 16 февраля 2012

Вы можете подписаться на UIKeyboardWillShowNotification или UIKeyboardDidShowNotification и переместить UIView при получении уведомления. Этот процесс описан здесь:

Руководство по программированию текста, Интернета и редактирования для iOS : «Перемещение содержимого, расположенного под клавиатурой»

5 голосов
/ 04 мая 2013

Может быть, это помогает: я не хотел, чтобы UIWebView прокручивался вообще, в том числе при фокусировке на текстовом поле.

Вы должны быть делегатом UIWebView:

_webView.scrollView.delegate = self;

А затем добавьте этот метод

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    scrollView.contentOffset = CGPointZero;
}
2 голосов
/ 15 февраля 2012

UIWebView имеет обратный вызов:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

Это срабатывает всякий раз, когда собирается загрузить новый URL-запрос.С помощью javascript вы можете инициировать новый URL-адрес запроса для события onfocus тега с пользовательской схемой, например:

window.location = "webViewCallback://somefunction";

Вот скрипт, который помещает ваше пользовательское событие внутри любой HTML-страницы для загрузки.*

Вам нужно будет получить весь HTML-код перед его загрузкой в ​​UIWebView следующим образом:

NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"your URL"] encoding:NSUTF8StringEncoding error:nil];

Затем вставьте в текст HTML в следующем месте следующее:

<script>
    var inputs = document.getElementsByTagName('input');

    for(int i = 0; i < inputs.length; i++)
    {
        if(inputs[i].type = "text")
        {
             inputs[i].onfocus += "javascript:triggerCallback()";
        }
    }

 function triggerCallback()
 {
      window.location = "webViewCallback://somefunction";
 }
</script>

Затем при обратном вызове вы должны сделать что-то вроде этого:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( [[inRequest URL] scheme] == @"webViewCallback" ) {

        //Change the views position 

        return NO;
    }

    return YES;
}

Вот и все.Надеюсь, это поможет.

1 голос
/ 30 августа 2011

Ух ты, у меня была такая же проблема несколько дней назад, это очень раздражало.Я понял, что window.yPageOffset меняется, но, насколько я знаю, нет никаких событий, которые можно связать, когда он изменится.Но, может быть, это поможет вам как-то.;-)

0 голосов
/ 20 января 2015

Я думаю, вы переписали scrollViewDidScroll неправильно. Вам необходимо реализовать пользовательский класс для UIWevView и перезаписать scrollViewDidScroll:

 - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
        [super scrollViewDidScroll:scrollView];
        [((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...