UIWebView webViewDidFinishLoad не получает вызов iOS
Я загружаю файл из каталога документов с помощью UIWebView. Я установил делегат из UIWebView, и я отвечаю на два метода делегирования, которые
webViewDidStartLoad
и webViewDidFinishLoad
Я получаю webViewDidStartLoad
Но я не получаю метод webViewDidFinishLoad
.
Ниже приведен код:
@interface MyView: UIViewController <UIWebViewDelegate> {
UIWebView *webView;
}
@property (nonatomic, retain) UIWebView *webView;
========================= Class ===========================
-(void)viewDidLoad {
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
mWebView = [[UIWebView alloc] initWithFrame:webFrame];
mWebView.delegate = self;
mWebView.scalesPageToFit = YES;
[self.view addSubview:mWebView];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", pathString]];
[mWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]] ];
}
// Delegate methods
-(void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"start");
}
-(void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"finish");
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
NSLog(@"Error for WEBVIEW: %@", [error description]);
}
Пожалуйста, дайте мне знать, что происходит не так. Я не получаю никакой ошибки в методе делегирования didFailLoadWithError.
Примечание: - файл, который я загружаю, огромен, скажем, 3 МБ.
Спасибо
============= отредактированы ==================
Поскольку я загружал очень огромный файл, делегат шел очень долго, что я не мог заметить, но для небольших файлов все работает нормально
Ответы
Ответ 1
Эй, наверное, ты должен это сделать,
-(void)viewDidLoad {
//webView alloc and add to view
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
mWebView = [[UIWebView alloc] initWithFrame:webFrame];
mWebView.delegate = self;
mWebView.scalesPageToFit = YES;
[self.view addSubview:mWebView];
//path of local html file present in documentsDirectory
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", pathString]];
//load file into webView
[mWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]] ];
//show activity indicator
[self showActivityIndicator]
}
Вызов метода removeLoadingView в следующих методах UIWebViewDelegate
-(void)webViewDidFinishLoad:(UIWebView *)webView {
[self removeLoadingView];
NSLog(@"finish");
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
[self removeLoadingView];
NSLog(@"Error for WEBVIEW: %@", [error description]);
}
Метод showActivityIndicator
-(void) showActivityIndicator
{
//Add a UIView in your .h and give it the same property as you have given to your webView.
//Also ensure that you synthesize these properties on top of your implementation file
loadingView = [UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]
loadingView.alpha = 0.5;
//Create and add a spinner to loadingView in the center and animate it. Then add this loadingView to self.View using
[self.view addSubView:loadingView];
}
Метод removeLoadingView
-(void) removeLoadingView
{
[loadingView removeFromSuperView];
}
Ответ 2
Хорошо, действительно ли ваш веб-просмотр заканчивается загрузкой? Вы должны реализовать webView:didFailLoadWithError:
, также для обнаружения сбоев.
Так как вы не получаете сообщения об ошибке или успехе. Возможно, что-то не так с данными, которые вы пытаетесь загрузить.
Попробуйте webView загрузить HTML-строку ( "Hello World!" ) и посмотреть, удастся ли это сделать. Если это так, то проблема связана с вашим ресурсом данных или с ним.
Ответ 3
Представители WebView
- Загрузить MBProgessHUD
- Добавить в свой проект
- Когда страница начинает загрузку загрузки (*), запущена и скрыта программа после успешной загрузки страницы
.h файл
@interface WebViewViewController : UIViewController <MBProgressHUDDelegate, UIWebViewDelegate>
{
MBProgressHUD *HUD;
}
.m Файл
- (void)webViewDidStartLoad:(UIWebView *)webView
{
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
[HUD show:YES];
}
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
[HUD hide:YES];
}
Ответ 4
Вероятно, он испытывает ошибку. Внесите –webView:didFailLoadWithError:
и проверьте.
Ответ 5
Обязательно реализуйте делегат() в файле .h и подключите делегат к представлению. Это исправило это для меня.
Ответ 6
.h файл
@property (retain, nonatomic) IBOutlet UIWebView *webview;
.m файл
-(void)viewDidLoad {
NSString *urlAddress = @"YOUR_URL";
_webview.scalesPageToFit = YES;
//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];
//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[_webview loadRequest:requestObj];
}
- (void)webViewDidStartLoad:(UIWebView *)webView;
{
[self.indicater_web startAnimating];
}
//a web view starts loading
- (void)webViewDidFinishLoad:(UIWebView *)webView;
{
[self.indicater_web stopAnimating];
}
//web view finishes loading
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
{
[self.indicater_web stopAnimating];
}
- (BOOL)webView:(UIWebView *)wv shouldStartLoadWithRequest:(NSURLRequest *)rq
{
[self.indicater_web startAnimating];
return YES;
}