如何从标准UIViewController中调用UIWebView的UIScrollView委托方法?
所以我只需要一个带有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?无论如何,这种过渡的事情如何工作?
请指教!
谢谢!
您是否检查过子视图中只有一个UIScrollView子类?在你的循环中登录一下,看看。如果有多个,那么你只能使用你的代码选择最后一个。
如果只有一个UIScrollView子类,您可以尝试保存对其委托的引用,然后在自己的委托方法中完成业务后传递消息。
所以,在你的循环,像
originalDelegate = s.delegate
然后在委托方法,是这样的:
- (void) scrollViewDidScroll: (UIScrollView*) scrollView;
{
// do your stuff
[originalDelegate scrollViewDidScroll: scrollView];
}
您可能需要检查originalDelegate是否响应选择在调用它之前,即如果([originalDelegate respondsToSelector:@selector(scrollViewDidScroll :))等。如果是我,我会开始实施所有12个委托方法定义在UIScrollView代尔加te协议。
没有测试过这个,所以有兴趣知道它是否可以工作。请注意,文档明确指出,UIWebView“不应该被分类”
感谢您的回答!我试了一下,它中途工作。我确信当我实现全部12个委托方法时,我面临的错误可以被消除。也许一个愚蠢的问题,但你怎么知道所有的方法返回?我的意思是特别针对那些你并未明确需要重写的人。我想要全部实现它们,但发现实际实现说明中缺少文档(如在方法签名实现之后)。谢谢! –
两个UIScrollViewDelegate方法返回一个值。对于这些情况,只要返回他们返回的内容,例如 - (UIScrollView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {//做你的东西返回[originalDelegate viewForZoomingInScrollView:originalDelegate]; }你在问什么? – Obliquely
是的,你提到我应该实现所有12个委托方法,但是如果只有两个方法返回任何东西,那么它自己实现所有方法有什么好处?我想这就是我没有得到的...... :) –