2012-07-09 49 views
0

我不知道這是如何工作的。我正在關注這個帖子:check if UIWebView scrolls to the bottom調用[super scrollViewDidScroll];對UIWebView崩潰的子類

我想知道當scrollViewScrolls做一些自定義的事情。我的子類爲UIWebView。我所做的只是迄今爲止:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    [super scrollViewDidScroll:scrollView]; 
    NSLog(@"%s", __FUNCTION__); 
} 

它在[super scrollViewDidScroll:scrollView]方法崩潰。當我刪除該行時,它工作正常。我不想剝奪超類的這種方法的實現。我只是想爲它添加一些自定義功能(將工具欄放在webview上方,就像Facebook應用程序一樣)。這是崩潰的原因嗎?謝謝。

+0

你不需要傳遞給super – 2012-07-09 21:25:14

回答

3

你確定UIWebView實際上實現了這個委託方法嗎?因爲它聽起來可能不會。覆蓋可選的委託方法是這樣時,應當使用下面的結構:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if ([UIWebView instancesRespondToSelector:_cmd]) { 
     [super scrollViewDidScroll:scrollView]; 
    } 
    NSLog(@"%s", __PRETTY_FUNCTION__); 
} 

這不僅會避免調用超級如果超類沒有實際實現的方法,但它會自動啓動,如果在操作系統更新調用超永遠導致超類開始響應該方法。

另請注意,您需要對超類名稱進行硬編碼(例如UIWebView)。試圖使用[self superclass][super class]會給你錯誤的結果。