0

我不确定这是如何工作的。我在关注这篇文章: 检查 UIWebView 是否滚动到底部

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

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

[super scrollViewDidScroll:scrollView]它在方法上崩溃。当我删除该行时,它工作正常。我不想带走这个方法的超类实现。我只是想为其添加一些自定义功能(在 web 视图上方放置一个工具栏,如 Facebook 应用程序)。这是崩溃的原因吗?谢谢。

4

1 回答 1

3

您确定UIWebView实际上实现了该委托方法吗?因为听起来好像没有。在覆盖这样的可选委托方法时,您应该使用以下构造:

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

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

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

于 2012-07-09T21:26:14.813 回答