4

したがって、PDFを表示するUIWebViewを含む標準のUIViewControllerがあります。アプリの機能については、scrollViewWillBeginDragging、scrollViewDidScrollなどのUIWebViewのネストされたUIScrollViewイベントに応答できる必要があります。

scrollViewにアクセスできる唯一の方法は、(ハックのように見えますが)サブビュー配列にアクセスして取得することです。

for (id subview in webView.subviews){
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])  {
        UIScrollView * s = (UIScrollView*)subview;
        s.delegate = self;
        s.tag = 1;
        scrollView = s;
    }
}

しかし、ズームなどのネイティブUIScrollViewのものが失われるため、それは価値があるよりも多くの問題を引き起こすようです。

だから私が必要としているものを要約すると:

UIViewControllerクラスをUIWebView内のUIScrollViewのデリゲートとして設定するための最良の方法は何ですか?自分のUIWebViewをサブクラス化して、UIWebViewに組み込まれているイベントを特定の方法で処理し、それを何らかの方法でUIViewControllerに渡すようにする必要がありますか?とにかく、その通過するものはどのように機能しますか?

お知らせ下さい!

ありがとうございました!

4

1 に答える 1

4
  1. サブビューにUIScrollViewサブクラスが1つしかないことを確認しましたか?ループ内のログに記録して確認します。複数ある場合は、コードを使用して最後の1つだけを取得します。

  2. UIScrollViewサブクラスが1つしかない場合は、そのデリゲートへの参照を保存してから、独自のデリゲートメソッドで、ビジネスの完了後にメッセージを渡すことができます。

だから、あなたのループでは、

originalDelegate = s.delegate

そして、デリゲートメソッドの場合、次のようになります。

- (void) scrollViewDidScroll: (UIScrollView*) scrollView;
{
     // do your stuff

     [originalDelegate scrollViewDidScroll: scrollView];
}

originalDelegateがセレクターを呼び出す前に、セレクターに応答するかどうかを確認する必要がある場合があります。つまり、([originalDelegate replysToSelector:@selector(scrollViewDidScroll :))などです。私であれば、UIScrollViewで定義された12個のデリゲートメソッドすべてを実装することから始めます。プロトコルを委任します。

これはテストされていないので、動作させることができるかどうかを知りたいと思います。ドキュメントには、UIWebViewは「サブクラス化されるべきではない」と明示的に記載されていることに注意してください

于 2011-07-11T04:23:41.747 に答える