2012-01-13 3 views

ответ

0

Сначала получите ссылку на UIWebView Scrollview с помощью этого свойства:

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

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

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

+0

Если у вас есть ссылка на scrollview, не можете ли вы, чтобы ваш контроллер просмотра был делегатом для scrollview, а затем отправил все события прокрутки? –

0

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

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

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

0

Извините, я думал 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

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

1

Опираясь на другие идеи здесь, 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

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

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 будет прокручиваться на дно, когда:

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 пикселей).

Смежные вопросы