gpt4 book ai didi

iphone - webViewDidStartLoad 和 ..FinishLoad 被顺序调用

转载 作者:行者123 更新时间:2023-11-29 04:00:52 28 4
gpt4 key购买 nike

我正在开发一个使用 UIWebView 的应用程序。我正在实现手动负载计数方法,如 UIWebView - How to identify the "last" webViewDidFinishLoad message? 中所示。

我可以看到对开始/完成/失败的调用原则上负载平衡。然而,对于一些网页(尤其是 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 实例(以及计数器)。我已经没有线索了:(...

有人知道这里可能发生什么吗? (顺便说一句,许多其他网站都不会发生这种情况,到目前为止只有 Google)

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

TIA,尼基尔

最佳答案

作为避免此问题的解决方法 - 您可以收听键盘显示/隐藏通知。然后当你知道使用键盘时,不允许Web View 执行请求

更新:

首先,您需要将 View Controller 设置为 Web View 委托(delegate),以便它可以响应 Web View 委托(delegate)消息:

@interface myViewController : UIViewController <UIWebViewDelegate>

然后,一旦创建了 webview 对象,将 View Controller 设置为它的委托(delegate):

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

someWebView.delegate = self;
}

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

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

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

如何知道键盘当前是否可见?请参阅this post

关于iphone - webViewDidStartLoad 和 ..FinishLoad 被顺序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15859361/

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