Iphone iOS:Webview在导航到另一个控制器时导致flicking
我在UIVIewController中使用webview,并使用以下方法在其中加载本地HTML文件Iphone iOS:Webview在导航到另一个控制器时导致flicking,iphone,uiwebview,load,ios5.1,Iphone,Uiwebview,Load,Ios5.1,我在UIVIewController中使用webview,并使用以下方法在其中加载本地HTML文件 [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:filePath]]]; 如果我把这个方法放在ViewDidLoad中,我可以在导航到我的控制器时看到白色的轻弹,这看起来不太好 我试着把这个方法放在ViewWill中,如下所示。我使用webViewLoaded标志来确保webview已加载,然
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:filePath]]];
如果我把这个方法放在ViewDidLoad中,我可以在导航到我的控制器时看到白色的轻弹,这看起来不太好
我试着把这个方法放在ViewWill中,如下所示。我使用webViewLoaded标志来确保webview已加载,然后仅显示当前视图,否则它将等待,但它将进入无限等待循环
- (void)viewWillAppear:(BOOL)animated {
webViewLoaded = NO;
webView.scalesPageToFit = allowZoom;
webView.dataDetectorTypes = UIDataDetectorTypeNone;
webView.delegate = self;
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:filePath]]];
int count = 0;
while(webViewLoaded == NO)
{
NSLog(@"Waiting...");
[NSThread sleepForTimeInterval:0.1];
if(count++ > 10) break;
}
}
- (void)webViewDidFinishLoad:(UIWebView *)localwebView {
webViewLoaded = YES;
}
我也在ViewDidLoad中尝试过同样的方法,但它仍然在无限循环中运行
请注意,webViewLoaded是“volatile BOOL”,但不会调用webview委托方法。不知道发生了什么事
谁能帮我修一下吗。谢谢。使用以下代码
[self performSelectorInBackground:@selector(webViewLoaded) withObject:nil];
为了不影响用户界面,请使用以下代码
[self performSelectorInBackground:@selector(webViewLoaded) withObject:nil];
为了不影响您的UI,请尝试使用
[NSURL fileURLWithPath:filePath]
首先尝试使用[NSURL fileURLWithPath:filePath]
:您正在阻止主线程,并且没有给WebView任何完成加载的机会。永远不要阻塞你的主线程
第二个:有两种UIWebView委托方法:webViewDidFinishLoad和webView:didFailLoadWithError:-确保同时侦听这两种方法
如果您试图等待WebView完成加载并在加载后仅显示控制器,请使用委派或块。请注意,这不是一种正确的做法-我只是修改您的示例以使其正常工作:
子控制器(带WebView):
主控制器:
-(void)doSomething {
SecondController * ctrl; /// secondController should be created AND has its view loaded at this point
/// ctrl = [SecondController new];
/// ctrl.view;
[ctrl startLoadingWithParent:self];
/// show user that we're doing something - display activity indicator or something
}
-(void)showMe:(UIViewController*)me {
[self.navigationController pushViewControllerAnimated:me];
}
首先:您正在阻止主线程,并且没有给WebView任何完成加载的机会。永远不要阻塞你的主线程 第二个:有两种UIWebView委托方法:webViewDidFinishLoad和webView:didFailLoadWithError:-确保同时侦听这两种方法 如果您试图等待WebView完成加载并在加载后仅显示控制器,请使用委派或块。请注意,这不是一种正确的做法-我只是修改您的示例以使其正常工作: 子控制器(带WebView): 主控制器:
-(void)doSomething {
SecondController * ctrl; /// secondController should be created AND has its view loaded at this point
/// ctrl = [SecondController new];
/// ctrl.view;
[ctrl startLoadingWithParent:self];
/// show user that we're doing something - display activity indicator or something
}
-(void)showMe:(UIViewController*)me {
[self.navigationController pushViewControllerAnimated:me];
}
webViewLoaded只是一个标志..不是一个方法!我猜如果我在后台加载webview,我会看到白色的flicking,直到加载webview为止!webViewLoaded只是一个标志..不是一个方法!我猜如果我在后台加载webview,我会看到白色的flicking,直到加载webview为止!引发异常---[NSURL\u CFURLRequest]:发送到实例***的未识别选择器由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSURL\u CFURLRequest]:发送到实例0x4ce2980的未识别选择器'能否打印出“文件路径”中包含的内容variable/var/mobile/Applications/../Documents/web1.htmlrows异常---[NSURL\u CFURLRequest]:发送到实例的未识别选择器***由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'-[NSURL\u CFURLRequest]:发送到实例0x4ce2980的未识别选择器“能否打印出“filePath”变量/var/mobile/Applications/../Documents/web1.htmlI执行了此操作,但未起作用!未调用任何webview委托。当我推送控制器和所有视图循环方法(viewdidload、ViewDidIspect等)时,它实际上开始加载退出!请查看doSomething中的注释行。您必须确保您的视图在此点加载。您的意思是什么?在调用loadWebview之前,我正在调用“loadview”方法。您能告诉我如何加载视图,但如果有其他方法,则不显示它吗?谢谢!从文档中-loadView:您不应该直接调用此方法。“。只需以某种方式访问视图(例如ctrl.view)以使其加载我这样做了,但没有起作用!没有调用任何webview委托。当我按下控制器和所有视图循环方法(viewdidload、ViewDidIspect等)时,它实际上开始加载。”退出!请查看doSomething中的注释行。您必须确保您的视图在此点加载。您的意思是什么?在调用loadWebview之前,我正在调用“loadview”方法。您能告诉我如何加载视图,但如果有其他方法,则不显示它吗?谢谢!从文档中-loadView:您不应该直接调用此方法。“。只需以某种方式访问视图(例如ctrl.view)即可使其加载