6

在 ios5 之前,我能够像这样访问 UIWebView 的 UIScrollView 委托:

for (id subview in webView1.subviews){
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])  {
        UIScrollView * s = (UIScrollView*)subview;
        OldDelegate = s.delegate;//OldDelegate is type id
                    s.delegate = self;
    }
}

现在,我知道这不是正确的方法,但当时(据我所知)这是唯一的方法。iOS 5 改变了这一点,所以我尝试用 iOS 5 的方式来做:

UIScrollView * s = webView.scrollView;
Olddelegate = s.delegate;
s.delegate = self;

但无论我尝试这样做,我的 OldDelegate 对象的值都是 0x0。保留这个委托值非常重要,但尽我所能,我只是得到 0x0。

有任何想法吗?

我没有使用ARC ...

4

2 回答 2

1

scrollView属性UIWebView是 的子类UIScrollView。这个名为的私有类_UIWebViewScrollView不使用该delegate属性,它始终为 nil。也许您可以进行一些重构并获得真正的滚动视图委托,但我几乎 100% 肯定苹果会拒绝您的应用程序这样做。

于 2012-05-09T15:17:45.513 回答
0

是的,如果您使用 arc,它可能会在未保留的 Olddelegate 上进行垃圾收集,您可以将文件标记为不使用带有 -fno-objc-arc 的 arc,并像以前一样自行处理保留和释放。或者,您可以按照此处所述实现强引用,以帮助您保留变量。https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

于 2012-02-19T00:02:13.800 回答