调用[super scrollViewDidScroll];在UIWebView的子类崩溃

时间:2012-07-09 21:23:39

标签: iphone

我不确定这是怎么回事。我关注此帖:check if UIWebView scrolls to the bottom

我想知道scrollViewScrolls什么时候做一些自定义的事情。我是UIWebView的子类。到目前为止,我所做的只是:

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

它在[super scrollViewDidScroll:scrollView]方法崩溃了。当我删除该行时,它工作正常。我不想带走超类的这种方法的实现。我只是想为它添加一些自定义功能(将一个工具栏放在webview上面,就像Facebook应用程序一样)。这有什么原因导致崩溃吗?感谢。

1 个答案:

答案 0 :(得分:3)

您确定UIWebView实际上是否实现了该委托方法?因为它听起来可能不是。在覆盖可选的委托方法时,您应该使用以下构造:

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

如果超类实际上没有实现该方法,这不仅会避免调用super,而且如果OS更新导致超类开始响应该方法,它将自动开始调用super。

另请注意,您需要对超类名称进行硬编码(例如UIWebView)。尝试使用[self superclass][super class]会给你错误的结果。