2012-02-29 32 views
2

所以我有以下代碼:設置UIWebView的滾動視圖代表將導致錯誤

NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    if ([currSysVer compare:@"5.0" options:NSNumericSearch] != NSOrderedAscending) { 
     webScrollView = self.webView_.scrollView; 
    } else { 
     webScrollView = [self.webView_ defaultScrollView]; 
    } 

webScrollView.delegate = self 

,當我滾動它給了我:

-[UIWebView scrollViewDidScroll:]: unrecognized selector sent to instance 0x8e8610 

這樣做沒有任何意義,爲什麼一個UIWebView正在調用scrollViewDidScroll \

+0

你在哪裏分配webScrollView解決? – Stavash 2012-02-29 19:59:44

回答

1

如果你看起來here,UIWebView符合UIScrollViewDelegate。實質上,它使用相同的委託,因爲UIWebView是可滾動的(您可能會說它是UIScrollView的子類,儘管在文檔中沒有明確說明,但UIScrollView可能是WebView的一部分)。

+0

嗯......所以我如何讓這項工作不會崩潰? – adit 2012-02-29 20:03:37

+0

再看看你的代碼,這將有助於看到你在哪裏定義webScrollView和webView。您是否在任何這些線路上發現了您忽略的警告?你是否在任何地方手動調用scrollViewDidScroll? – JKomusin 2012-02-29 21:15:18

0

UIWebView HAS-A一scrollView其中的是代表,這意味着scrollViewDidScroll:方法由UIWebView實現的,因爲你正在使用的UIWebView提供給它的scrollView參考,你現在說你會處理這個回調,包括scrollViewDidScroll:,顯然你不是這個原因,當委託調用發生時它失敗了。

你爲什麼試圖分配作爲webview滾動視圖的委託?,該行爲已經實現。我不確定如果你試圖改變這種行爲,它會發揮很好的作用,但是無論哪種情況,如果你想成爲scrollView的委託,那麼你必須實現UIScrollViewDelegate協議,然後實現所需的方法。

0

我已經找到了所有版本

UIScrollView* sv = nil; 
    for (UIView* v in _webview.subviews) { 
     if([v isKindOfClass:[UIScrollView class]]){ 
      sv = (UIScrollView*) v; 
      sv.scrollEnabled = NO; 
      sv.bounces = NO; 

    } 
}