所以我只有一个标准的 UIViewController ,其中有一个显示 pdf 的 UIWebView 。对于应用程序功能,我需要能够响应 UIWebView 的嵌套 UIScrollView 事件,例如scrollViewWillBeginDragging、scrollViewDidScroll 等。
我可以访问滚动视图的唯一方法是(看起来像黑客)进入并通过子视图数组获取它:
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?那个路过的东西究竟是如何运作的?
请指教!
谢谢你!
您是否检查过子视图中只有一个 UIScrollView 子类?在你的循环中塞入一个日志来查看。如果有多个,那么您只能使用代码选取最后一个。
如果只有一个 UIScrollView 子类,您可以尝试保存对其委托的引用,然后在完成业务后在您自己的委托方法中传递消息。
所以,在你的循环中,类似
originalDelegate = s.delegate
然后对于委托方法,类似:
- (void) scrollViewDidScroll: (UIScrollView*) scrollView;
{
// do your stuff
[originalDelegate scrollViewDidScroll: scrollView];
}
您可能需要在调用之前检查originalDelegate是否响应选择器,即 if ([originalDelegate respondsToSelector: @selector(scrollViewDidScroll:)) 等。如果是我,我会首先实现 UIScrollView 中定义的所有十二个委托方法委托协议。
没有对此进行测试,因此有兴趣知道它是否可以工作。请注意,文档明确指出 UIWebView“不应被子类化”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)