4

所以我只需要一個帶有UIWebView的標準UIViewController來顯示pdf。對於應用程序的功能,我需要能夠向一個UIWebView的嵌套UIScrollView的事件,如scrollViewWillBeginDragging,scrollViewDidScroll等應對如何從標準UIViewController中調用UIWebView的UIScrollView委託方法?

我可以訪問了滾動的唯一方法是(這似乎是一個黑客)去並通過子視圖數組獲得它:

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類的的UIScrollView的委託的UIWebView內的最佳方式?有沒有什麼我需要做的是繼承我自己的UIWebView,以便它以某種方式處理UIWebView中構建的事件,然後以某種方式將它傳遞給UIViewController?無論如何,這種過渡的事情如何工作?

請指教!

謝謝!

回答

4
  1. 您是否檢查過子視圖中只有一個UIScrollView子類?在你的循環中登錄一下,看看。如果有多個,那麼你只能使用你的代碼選擇最後一個。

  2. 如果只有一個UIScrollView子類,您可以嘗試保存對其委託的引用,然後在自己的委託方法中完成業務後傳遞消息。

所以,在你的循環,像

originalDelegate = s.delegate 

然後在委託方法,是這樣的:

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

    [originalDelegate scrollViewDidScroll: scrollView]; 
} 

您可能需要檢查originalDelegate是否響應選擇在調用它之前,即如果([originalDelegate respondsToSelector:@selector(scrollViewDidScroll :))等。如果是我,我會開始實施所有12個委託方法定義在UIScrollView代爾加te協議。

沒有測試過這個,所以有興趣知道它是否可以工作。請注意,文檔明確指出,UIWebView「不應該被分類」

+0

感謝您的回答!我試了一下,它中途工作。我確信當我實現全部12個委託方法時,我面臨的錯誤可以被消除。也許一個愚蠢的問題,但你怎麼知道所有的方法返回?我的意思是特別針對那些你並未明確需要重寫的人。我想要全部實現它們,但發現實際實現說明中缺少文檔(如在方法簽名實現之後)。謝謝! –

+0

兩個UIScrollViewDelegate方法返回一個值。對於這些情況,只要返回他們返回的內容,例如 - (UIScrollView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {//做你的東西返回[originalDelegate viewForZoomingInScrollView:originalDelegate]; }你在問什麼? – Obliquely

+0

是的,你提到我應該實現所有12個委託方法,但是如果只有兩個方法返回任何東西,那麼它自己實現所有方法有什麼好處?我想這就是我沒有得到的...... :) –

相關問題