Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么UIWebView实例不调用scrollViewDidScroll?_Iphone_Ios_Uiwebview - Fatal编程技术网

Iphone 为什么UIWebView实例不调用scrollViewDidScroll?

Iphone 为什么UIWebView实例不调用scrollViewDidScroll?,iphone,ios,uiwebview,Iphone,Ios,Uiwebview,iOS文档说明,该类符合UIScrollViewDelegate。但是UIWebView实例不调用其控制器的scrollViewDidScroll方法。委托的设置正好由 [webView setDelegate:self]; 并且成功调用了webviewdiffinishload。控制器同时实现两个委托UIWebViewDelegate和UIScrollViewDelegate,如下所示: @interface WebviewController : UIViewController<U

iOS文档说明,该类符合UIScrollViewDelegate。但是UIWebView实例不调用其控制器的
scrollViewDidScroll
方法。委托的设置正好由

[webView setDelegate:self];
并且成功调用了
webviewdiffinishload
。控制器同时实现两个委托UIWebViewDelegate和UIScrollViewDelegate,如下所示:

@interface WebviewController : UIViewController<UIWebViewDelegate, UIScrollViewDelegate>{
    UIWebView *webView;
}

这种分类方法基本上是相同的:调用代理的scrollViewDidScroll方法。那么为什么第一种方法不起作用呢?

我猜您只为UIWebView设置了委托。 尝试设置scrollView的委托

webView.scrollView.delegate = self

应该没问题。

这不正确。如果您将使用:

@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
    [self.delegate scrollViewDidScroll: scrollView];
}
@end
当您尝试在iOS7及更多页面上输入数据时,您将失去焦点

您需要为UIWevView实现自定义类并覆盖scrollViewDidScroll:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[super scrollViewDidScroll:scrollView];
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
[超级scrollViewDidScroll:scrollView];
[((id)self.delegate)scrollViewDidScroll:scrollView];}

是否为scrollView设置了委托
webView.scrollView.delegate=self
?不,我没有。是的,这很有效!那么,
UIWebView
实例默认设置其
scrollViews
的委托给该实例?看起来。。。否则,类别方法将无法工作。要工作,此代码必须将内部类别scrolView委托设置为webview,然后将内部UIWebView(CustomScroll)scrollViewDidScroll此消息通过self.delegate(UIWebView的委托)发送到响应webview委托的对象。所以,是的,这个代码可以工作。考虑使用KVO来代替子代码< > ScVIEW视图>代码> > <代码> > Cordon Obj/<代码>属性。修改
uicrollview
的委托属性不一定是安全的,因为
UIWebView
可以在内部使用它。
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[super scrollViewDidScroll:scrollView];
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];}