2012-01-13 6 views

답변

0

먼저이 속성을 사용하여있는 UIWebView있는 ScrollView에 대한 참조를 얻을 :

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

을 당신이에 대한 참조하면 그것의 contentSize 확인하고 contentOffSet과 비교 수를 일단. UIWebView는 이미 scrollView의 위임자이므로 스스로 위임 할 수는 없지만 그 트릭이 작동해야합니다.

문제는 스크롤이 발생하면 콜백을받지 못하기 때문에 모든 항목을 자주 확인해야한다는 것입니다. 그렇지 않으면 자신을 scrollView의 대리자로 만들고 UIWebView가 구현하는 모든 메서드를 구현하고 해당 동작을 모방 한 다음 didScroll에서 해당 조건을 확인하십시오.

+0

scrollview에 대한 참조가있는 경우보기 컨트롤러를 scrollview의 위임자로 설정 한 다음 모든 스크롤 이벤트를받을 수 없습니까? –

0

또 다른 옵션은 웹보기에 일부 자바 스크립트를 삽입 한 다음 자바 스크립트에서 window.onscroll 이벤트를 사용하여 사용자가 창 하단으로 스크롤했을 때를 감지하는 것입니다. 스크롤을 감지하면 많은 예제를 온라인에서 찾을 수 있습니다 JS를 사용하는 이벤트).

사용자가 맨 아래에 있음을 감지하면 JavaScript의 웹보기에서 가짜 URL을 document.location.href = "http : // madeupcallbackurl"이라고 말하면서 앱에 다시 전화 할 수 있습니다. 그런 다음 웹보기 위임자를 사용하여 요청을 차단하고 네이티브 코드 논리를 수행하십시오.

당신이 그 일을 할 수 있다면 스크롤 위임을 사용하는 것이 더 쉽습니다!

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에 대해서는 수행하지 않았습니다. 위의 UITableView UIWebView 대체 시도하고 작동하는지 볼 수 있습니다. – jimmyg

1

건물 여기, UIWebViewUIScrollViewDelegate 프로토콜을 준수합니다. 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

이렇게하면됩니다.

UIWebViewUIScrollViewDelegate을 준수합니다. 당신의 UIWebView 스크롤 할 때의 추적 할 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 콜백을 사용

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

지금이 방법은 때마다 웹보기 스크롤을 호출됩니다.

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 
     } 
    } 

입니다 때 하단에 사용자가 스크롤 콘텐츠의 경우 WebView의 y 위치 (WebView의 왼쪽 위 모퉁이의 y 좌표)와 콘텐츠의 아래쪽 사이의 차이는 webview 프레임의 높이와 같습니다. 이 코드는 if 조건에 들어가기 위해 만족되는이 조건에 따라 작동합니다.

안전을 기하기 위해 if 조건을 수정하여 오차 범위 (어쩌면 + 또는 - 10 픽셀)를 가질 수 있습니다.

관련 문제