0

これがどのように機能するかわかりません。私はこの投稿をフォローしていました: UIWebViewが一番下までスクロールするかどうかを確認してください

scrollViewScrollsがカスタム処理を実行するタイミングを知りたいです。UIWebViewをサブクラス化します。私がしたのはこれまでのところこれだけでした:

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

メソッドでクラッシュし[super scrollViewDidScroll:scrollView]ます。その行を削除すると、正常に機能します。このメソッドのスーパークラスの実装を削除したくありません。いくつかのカスタム機能を追加したかっただけです(FacebookアプリのようにWebビューの上にツールバーを配置します)。これがクラッシュする理由はありますか?ありがとう。

4

1 に答える 1

3

UIWebView実際にそのデリゲートメソッドを実装していますか?おそらくそうではないように聞こえるからです。このようなオプションのデリゲートメソッドをオーバーライドする場合は、次の構成を使用する必要があります。

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

これにより、スーパークラスが実際にメソッドを実装していない場合にスーパーの呼び出しが回避されるだけでなく、OSの更新によってスーパークラスがメソッドへの応答を開始した場合に、スーパーの呼び出しが自動的に開始されます。

また、スーパークラス名をハードコーディングする必要があることにも注意してください(例UIWebView)。[self superclass]どちらかを使おうとする[super class]と、間違った結果になります。

于 2012-07-09T21:26:14.813 に答える