[英]When I set the delegate of a UIWebView's built-in UIScrollView, I lose the ability to pinch to zoom, how can I get it back?
[英]How can I get a UIWebView's UIScrollView delegate methods called from within a standard UIViewController?
所以我只有一个标准的 UIViewController,里面有一个 UIWebView,它显示一个 pdf。 对于应用程序功能,我需要能够响应 UIWebView 的嵌套 UIScrollView 事件,如 scrollViewWillBeginDragging、scrollViewDidScroll 等。
我可以访问 scrollView 的唯一方法是(它似乎是一个 hack)go 并通过 subviews 数组获取它:
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 class 设置为 UIScrollView 内部 ZB99A6ADB3DAB8ED2DEC95921 的代表的最佳方法是什么? 我需要对我自己的 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 “不应被子类化”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.