8

I know that this is possible in the Tweetie for iPhone or the xkcd iPhone app, but they are using a table. Any idea if this can be done for a simple UIWebView as well? I'm aware of the Javascript suggestions in this SO question, but what about making that natively?

Community
  • 1
  • 1
phi
  • 10,634
  • 6
  • 53
  • 88

4 Answers4

13

To retrieve scroll events on UIWebView I personnaly use this code to get the scrollview that is inside the UIWebView :

- (void) addScrollViewListener
{
    UIScrollView* currentScrollView;
    for (UIView* subView in self.myWebView.subviews) {
         if ([subView isKindOfClass:[UIScrollView class]]) {
            currentScrollView = (UIScrollView*)subView;
            currentScrollView.delegate = self;
        }
    }
}

It's working. You can also use it to call [(UIScrollView*)subView setContentOffset:offSet animated:YES]; The only problem may be not to pass Apple code checking. I don't know yet since I'm still in coding phase.

Anyone tried that yet ?

CedricSoubrie
  • 6,657
  • 2
  • 39
  • 44
  • I know from a certain developer that she has passed the approval process whilst having something like this in the code, for removing the `UIWebView` shadows (you'd have to get the `UIScrollView` for that as well) – Joost Nov 03 '10 at 11:02
  • Works like charm! (Though I didn't submit my app to App Store yet) – Di Wu Oct 30 '11 at 10:13
  • Beware, this code doesn't work in iOS 5 because the scrollView of the webView class changed. Use this code instead : if ([subView isKindOfClass:[UIScrollView class]]) I changed my original post so the code is compatible with iOS 5 – CedricSoubrie Nov 01 '11 at 13:09
5

FYI, iOS 5 has officially introduced the property scrollView in UIWebView. I tested it. It worked perfectly with EGO's pull and refresh code. So the problem is no longer a problem for any iOS 5 devices.

For downward compatibility, you still need @CedricSoubrie's code though.

Di Wu
  • 6,436
  • 3
  • 35
  • 51
1

To get a reference for the UIScrollView in UIWebView, simply search it by iterating trough subviews.

for(id eachSubview in [webView subviews]){
        if ([eachSubview isKindOfClass:[UIScrollView class]]){
            scrollView = eachSubview;
            break;
        }
}

After that you can easily wire up things to your EGORefreshTableHeaderView interface with the UIWebView and the UIScrollView delegate callbacks.

zed_0xff
  • 32,417
  • 7
  • 53
  • 72
Geri Borbás
  • 15,810
  • 18
  • 109
  • 172
1

To tell the truth, UIWebVIew class has an undocumented getter method called _scrollView; So the code goes:

scrollView = [webView _scrollView];

Geri Borbás
  • 15,810
  • 18
  • 109
  • 172
  • Doing things this way is using a "private API". If you use CedricSoubrie's method above, you are using only public methods. – jkp Mar 09 '11 at 18:33