我無法弄清楚如何在進行滾動時在Objective-c中檢測WebView。我看過WebFrameLoadDelegate:
,發現didChangeLocationWithinPageForFrame:
方法,但這似乎工作。WebView - 用戶已滾動
回答
你會想檢測webview是通過使用JavaScript滾動。如果你在「uiwebview javascript」上做了一個快速的谷歌搜索,你會看到很多關於如何在uiwebivew上運行javascript的例子。一旦你得到javascript來檢測滾動發生,那麼你有JavaScript的變化window.location的東西假,並實現「webView:shouldStartLoadWithRequest:navigationType:」委託執行Objective-C代碼。從委託方法返回NO以不加載請求。
取決於您使用的是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:
添加觀察者的web視圖的NSViewBoundsDidChangeNotification(此示例中是在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
}
在OS X,你可以通過訂閱NSScrollViewWillStartLiveScrollNotification
檢測它:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mySelector:)
name:NSScrollViewWillStartLiveScrollNotification object:nil];
我通過nil
爲對象的參數,因爲當我得到它,它不會出現真正來自enclosingScrollView
在WebView
上。 WKWebView in Yosemite上沒有滾動視圖屬性。所以在搬運時,你必須檢查它是否在發送你的Web視圖(是偏執型安全):
-(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 documentation中列出了其他滾動通知。
- 1. Webview不滾動
- 2. 動態滾動WebView
- 3. WebView禁用滾動條
- 4. ListView和WebView滾動
- 5. WebView自動滾屏
- 6. webview檢測滾動
- 7. Android WebView可滾動
- 8. WebView滾動問題
- 9. 滾動到的WebView
- 10. 自動滾動WebView Android
- 11. 在滾動視圖中滾動Webview
- 12. Webview - setInitialScale防止scrollTo滾動Webview
- 13. Android 3.1 WebView溢出滾動 - 不滾動滾動的長列表
- 14. Android WebView向下滾動
- 15. Webview +滾動問題+ android
- 16. 隱藏webview滾動的linearlayout
- 17. 在Webview中滾動編號
- 18. WebView平滑滾動問題
- 19. Android webview:檢測滾動
- 20. Android WebView平滑滾動
- 21. android無限滾動webview
- 22. UWP WebView滾動錯誤
- 23. Android WebView不會滾動
- 24. 還原webview滾動位置?
- 25. 防止鈦webview滾動?
- 26. 自定義webview滾動條
- 27. 在Robotium中滾動webview?
- 28. WebView水平滾動失敗
- 29. webview滾動問題android
- 30. Android webview滾動問題
NSViewBoundsDidChange從Web視圖的私有子視圖中觸發,而不是Web視圖本身。而且每當發生任何滾動時,不僅僅是用戶發起的。在運行Yosemite的Mac上,這似乎不適用於我。 – 2014-12-31 18:29:07