gpt4 book ai didi

iphone - 如何获取从标准 UIViewController 中调用的 UIWebView 的 UIScrollView 委托(delegate)方法?

转载 作者:行者123 更新时间:2023-12-03 19:14:19 25 4
gpt4 key购买 nike

所以我只有一个标准的 UIViewController ,其中有一个显示 pdf 的 UIWebView 。对于应用程序功能,我需要能够响应 UIWebView 的嵌套 UIScrollView 事件,例如scrollViewWillBeginDragging、scrollViewDidScroll 等。

我访问scrollView的唯一方法是(看起来像黑客)进入并通过 subview 数组获取它:

for (id subview in webView.subviews){
if ([[subview class] isSubclassOfClass: [UIScrollView class]]) {
UIScrollView * s = (UIScrollView*)subview;
s.delegate = self;
s.tag = 1;
scrollView = s;
}
}

但这似乎引入了比其值(value)更多的问题,因为我丢失了 native UIScrollView 的东西,例如缩放。

总结一下我需要什么:

将我的 UIViewController 类设置为 UIWebView 内部 UIScrollView 的委托(delegate)的最佳方法是什么? 我需要做些什么来子类化我自己的 UIWebView 以便它处理来自它的事件以某种方式构建 UIWebView,然后以某种方式将其传递给 UIViewController?无论如何,这个传递的东西是如何工作的?

请多多指教!

谢谢!

最佳答案

  1. 您检查过 subview 中只有一个 UIScrollView 子类吗?在你的循环中塞入一个日志来查看。如果有多个,那么您只能使用代码选取最后一个。

  2. 如果只有一个 UIScrollView 子类,您可以尝试保存对其委托(delegate)的引用,然后在完成业务后在您自己的委托(delegate)方法中传递消息。

所以,在你的循环中,类似

originalDelegate = s.delegate

然后对于委托(delegate)方法,类似于:

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

[originalDelegate scrollViewDidScroll: scrollView];
}

您可能需要在调用之前检查originalDelegate是否响应选择器,即if ([originalDelegate respondsToSelector: @selector(scrollViewDidScroll:)) 等。如果是我,我会首先实现定义的所有十二个委托(delegate)方法在 UIScrollView 委托(delegate)协议(protocol)中。

没有测试过这个,所以有兴趣知道它是否可以工作。请注意,文档明确指出 UIWebView“不应子类化”

关于iphone - 如何获取从标准 UIViewController 中调用的 UIWebView 的 UIScrollView 委托(delegate)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com