проверьте, прокручивает ли UIWebView до дна - PullRequest
1 голос
/ 14 января 2012

Как проверить / вызвать метод, когда пользователь находится в нижней части UIWebView при прокрутке?Я хочу открыть представление (добавить подпредставление), когда пользователь находится внизу содержимого.

Ответы [ 5 ]

1 голос
/ 14 января 2012

Опираясь на другие идеи, UIWebView соответствует протоколу UIScrollViewDelegate. Вы можете создать подкласс UIWebView и переопределить соответствующие UIScrollViewDelegate методы, вызвав [super ...], чтобы исходное поведение все еще присутствовало.

@interface SpecialWebview : UIWebView

@end

@implementation SpecialWebview

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [super scrollViewDidScroll:scrollView];

    // Check scroll position and handle events as needed...
}

@end
0 голосов
/ 14 января 2012

Вот как бы я это сделал.

UIWebView соответствует UIScrollViewDelegate.Используйте обратный вызов - (void)scrollViewDidScroll:(UIScrollView *)scrollView, чтобы отслеживать, когда ваша UIWebView прокручивается:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
   //The webview is is scrolling
   int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue];
   int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];
}

Теперь этот метод будет вызываться всякий раз, когда прокручивается ваш webView.Ваш веб-просмотр будет прокручиваться вниз, когда:

webView_content_height - webView(y) = webView.frame.height; //pseudo code

Ваш обратный вызов делегата теперь будет выглядеть следующим образом:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
       //The webview is is scrolling
       int xPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollX"] intValue];
       int yPosition = [[webView stringByEvaluatingJavaScriptFromString: @"scrollY"] intValue];

       if([webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] - yPosition == webView.frame.height)
       {
            //The user scrolled to the bottom of the webview
       }
    }

Чтокод переводится в то, что когда пользователь прокручивает до нижней части содержимого, разница между y-позицией webView (которая является y-координатой верхнего левого угла webView) и нижней частью содержимого будет равна высотерамка веб-просмотра.Код действует при условии выполнения этого условия для входа в условие if.

Чтобы быть в безопасности, вы можете изменить условие if, чтобы иметь поле для ошибки (может быть + или - 10пикселей).

0 голосов
/ 14 января 2012

Другой вариант - добавить JavaScript в веб-представление, а затем использовать событие window.onscroll в JavaScript, чтобы определить, когда пользователь прокручивает страницу до конца (вы можете найти множество примеров в Интернете, если обнаружите события прокрутки). используя JS).

Как только вы обнаружите, что пользователь находится внизу, вы можете перезвонить в приложение, загрузив поддельный URL-адрес в веб-представлении из JavaScript, сказав document.location.href = "http://madeupcallbackurl",, а затем использовать веб-представление делегат для перехвата этого запроса и выполнения логики собственного кода.

Использование делегата scrollview, вероятно, проще, если вы можете заставить это работать!

0 голосов
/ 14 января 2012

Извините, я думал о UITableView. Вы спрашиваете о UIWebView. Я не знаю, будет ли это работать с UIWebView.

У меня есть код, который делает это с помощью UIScrollViewDelegate.

@interface myViewController : UIViewController_iPad <UIScrollViewDelegate> {
    UITableView *myTableView;
    ...
}

- (void)viewDidLoad {
    myTableView.delegate = self;
    ...
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // If necessary, verify this scrollview is your table:
    // if (scrollView == myTableView) {
        CGPoint offset = myTableView.contentOffset;
        if (myTableView.contentSize.height - offset.y >= myTableView.bounds.size.height)
        {
            // The table scrolled to the bottom. Do your stuff...
        }
    // }
}
0 голосов
/ 14 января 2012

Сначала получите ссылку на UIWebView scrollView, используя это свойство:

@property(nonatomic, readonly, retain) UIScrollView *scrollView

Как только вы получите ссылку на нее, вы можете проверить ее contentSize и сравнить с contentOffSet.Вы не можете сделать его делегатом, поскольку UIWebView уже является делегатом для scrollView, но этот трюк должен работать.

Проблема в том, что вы не получаете callBack, когда происходит прокрутка ..так что вам придется проверять каждый так часто.В противном случае вам придется сделать себя делегатом scrollView и реализовать все методы, которые реализует UIWebView, и имитировать это поведение, а затем проверить didScroll для этого условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...