繁体   English   中英

如何获取从标准 UIViewController 中调用的 UIWebView 的 UIScrollView 委托方法?

[英]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 吗? 无论如何,那个传递的东西是如何工作的?

请指教!

谢谢!

  1. 您是否检查过子视图中只有一个 UIScrollView 子类? 在您的循环中插入日志以查看。 如果有多个,那么您只能使用您的代码选择最后一个。

  2. 如果只有一个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM