0

我正在开发一个使用 UIWebView 的应用程序。我正在实现UIWebView 中的手动负载计数方法 - 如何识别“最后一个”webViewDidFinishLoad 消息?

我可以看到原则上对 start/finish/failLoad 的调用是平衡的。但是,对于一些网页(尤其是 google.com),页面最初加载良好,几秒钟后会自动(似乎)刷新自身。开始/结束顺序如下所示:

-[MyWebView webViewDidStartLoad:], 1, 0x895150c
-[MyWebView webView:didFailLoadWithError:], 0, 0x895150c
-[MyWebView webViewDidStartLoad:], 1, 0x895150c
-[MyWebView webViewDidStartLoad:], 2, 0x895150c
-[MyWebView webViewDidFinishLoad:], 1, 0x895150c
-[MyWebView webViewDidFinishLoad:], 0, 0x895150c
-[MyWebView webViewDidStartLoad:], 1, 0x895150c   <-- after a few seconds' gap
-[MyWebView webViewDidFinishLoad:], 0, 0x895150c

第一个参数是被调用的函数,第二个是计数器的值,最后一个值是 loadCounter 的地址,只是为了确认它是同一个 webView 实例(因此也是计数器)被调用。我的线索不多了:(...

有没有人有任何线索,这里可能发生了什么?(顺便说一句,许多其他网站不会发生这种情况,到目前为止只有谷歌)

编辑:为什么对我很重要,因为当它刷新(显然是随机的)时,它会关闭键盘。如果用户已经在输入内容,这很烦人。是否可以在后台继续对站点进行任何进一步的刷新,同时在前面继续用户交互(尤其是键盘)?

TIA,尼基尔

4

1 回答 1

1

作为避免该问题的解决方法 - 您可以收听键盘显示/隐藏通知。然后当你知道使用键盘时,不要让 web 视图执行请求

更新:

首先,您需要将您的视图控制器设置为 webview 委托,以便它可以响应 web 视图委托消息:

@interface myViewController : UIViewController <UIWebViewDelegate>

然后一旦创建了 webview 对象,将视图控制器设置为它的委托:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    someWebView.delegate = self;
}

现在,当 webview 将执行其请求时,它将首先咨询 myViewController,因为它是关联的委托。如果您不想让 webview 执行请求,此时您应该返回 NO。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

    if (keyboardIsShown == YES){
        return NO;
    }
    else{
        return YES;
    }
}

您如何知道此时键盘是否可见?看到这个帖子

于 2013-04-07T09:18:18.033 回答