WebView - пользователь прокрутил - PullRequest
2 голосов
/ 22 июня 2010

Я не могу понять, как заставить WebView в Objective-C обнаруживать, когда была сделана прокрутка. Я посмотрел на WebFrameLoadDelegate: и нашел didChangeLocationWithinPageForFrame: метод, но это, похоже, сработало.

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Вы захотите обнаружить, что веб-просмотр прокручивается с помощью JavaScript. Если вы выполните быстрый поиск в Google по «uiwebview javascript», вы увидите множество примеров того, как запустить javascript в uiwebivew. Как только вы получаете javascript для обнаружения происходящей прокрутки, тогда у вас есть javascript change window.location на что-то фальшивое и реализует делегат "webView: shouldStartLoadWithRequest: navigationType:" для выполнения кода target-c. Верните NO из метода делегата, чтобы не загружать запрос.

1 голос
/ 09 мая 2013

Зависит от того, используете ли вы UIWebView (iOS - Cocoa Touch) или WebView (OS X - Cocoa).

iOS (iOS 5 и более поздние версии):

UIWebView предоставляет свой UIScrollView, и вы можете установить делегат представления прокрутки, а затем реализовать делегат scrollViewDidScroll: метод делегата (конечно, сначала добавив объявление @interface вашего класса; этот пример находится в подклассе UIViewController):

- (void)viewDidLoad {
   [super viewDidLoad];
   [_webView.scrollView setDelegate:self];
}

#pragma mark UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // do something in response to scroll
    }
}

OS X:

Добавление наблюдателя для NSViewBoundsDidChangeNotification WebView (этот пример находится в подклассе NSWindowController):

- (id)initWithWindowNibName:(NSString *)windowNibName {
    self = [super initWithWindowNibName:windowNibName];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                  selector:@selector(_scrollDetected)
                                                  name:NSViewBoundsDidChangeNotification
                                                  object:_webView];
    }
    return self;
}

- (void)_scrollDetected {
   // do something in response to scroll
}
0 голосов
/ 31 декабря 2014

В OS X вы можете обнаружить его, подписавшись на NSScrollViewWillStartLiveScrollNotification:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mySelector:)
  name:NSScrollViewWillStartLiveScrollNotification object:nil];

Я передаю nil в качестве параметра объекта, потому что, когда я его получаю, он, кажется, не приходитот enclosingScrollView на WebView.И нет свойства просмотра прокрутки на WKWebView в Йосемити .Так что при обработке вы должны проверить, отправляет ли это ваше веб-представление (будучи параноиком по поводу безопасности типов):

-(void)handleScroll:(id)sender
{
  if ([sender isKindOfClass:[NSNotification class]])
  {
    NSNotification *notif = (NSNotification *)sender;
    if ([notif.object isKindOfClass:[NSView class]])
    {
        NSView *view = (NSView *)notif.object;
        if ([view isDescendantOf:self.webView])
        {
           //Handle scroll here
        }
    }
  }
}

Я пробовал эту вещь для проверки потомков только с WebView, так что если вывы используете WKWebView, YMMV.

В документации NSScrollView .

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