4

だから、私はちょうど標準のUIViewControllerには、PDFを表示するUIWebViewを持っています。アプリケーションの機能については、scrollViewWillBeginDragging、scrollViewDidScrollなどのUIWebViewの入れ子になったUIScrollViewイベントに応答する必要があります。標準のUIViewController内から呼​​び出される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のものを失うので、それは、価値があるよりも多くの問題を紹介しているようです。だから私は必要としてるものをまとめるために

のUIWebViewの内部UIScrollViewのの代理人として私のUIViewControllerクラスを設定するための最良の方法は何ですか?自分自身のUIWebViewをサブクラス化することで、UIWebViewに組み込まれたイベントを特定の方法で処理し、何とかUIViewControllerに渡す必要があるのですか?とにかくそれはどうやって働くのでしょうか?

お知らせください!

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

答えて

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

  2. UIScrollViewサブクラスが1つだけの場合は、委任先への参照を保存してから、ビジネスを完了した後にメッセージを渡すことができます。

だから、デリゲートメソッドのための

originalDelegate = s.delegate 

そしてように、あなたのループでは、何かが、何かのように:

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

    [originalDelegate scrollViewDidScroll: scrollView]; 
} 

あなたはoriginalDelegateがセレクタに応答するかどうかをチェックする必要があります([originalDelegate respondsToSelector:@selector(scrollViewDidScroll :))など。それが私だったら、UIScrollView delegaで定義された12のデリゲートメソッドをすべて実装することから始めますteプロトコル。

これはテストされていないため、動作させることができるかどうかを知ることになります。注:ドキュメントは、明示的にUIWebViewは「サブクラス化されてはいけません」と言います。

+0

ありがとうございました!私はそれを試して、それは半分の作品です。私が直面しているバグは、すべての12のデリゲートメソッドを実装するとアイロンをかけることができると確信しています。多分愚かな質問かもしれませんが、どのようにすべての方法を返すべきか分かりますか?私はあなたが明示的にオーバーライドする必要がないものを特に意味しますか?私はそれらをすべて実装したいと思いますが、実際の実装手順では(メソッドのシグネチャ実装の後のように)ドキュメンテーションが不足しています。ありがとう! –

+0

2つのUIScrollViewDelegateメソッドが値を返します。そのような場合は、返品内容を返すだけです。 - (UIScrollView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {//あなたのものを返す[originalDelegate viewForZoomingInScrollView:originalDelegate]; }それはあなたが求めていたものですか? – Obliquely

+0

そうですね、12のデリゲートメソッドをすべて実装する必要があると言われましたが、2つしか返さない場合は、自分ですべてを実装するのに何が役立ちますか?私はそれが私が得るものではないと思う... :) –

関連する問題