我想將活動指示器添加到Web視圖。 但我不知道什麼時候瀏覽網頁完成加載。 我開始在viewdidload中進行動畫製作。將活動指示器添加到Web視圖
2
A
回答
19
你不應該開始viewDidLoad中動畫。順應
UIWebViewDelegate
協議,能讓您的網絡視圖的委託您的視圖控制器,然後使用委託方法:
@interface MyVC: UIViewController <UIWebViewDelegate> {
UIWebView *webView;
UIActivityIndicatorView *activityIndicator;
}
@end
@implementation MyVC
- (id)init
{
self = [super init];
// ...
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.frame = CGRectMake(x, y, w, h);
[self.view addSubview:activityIndicator];
webView = [[UIWebView alloc] initWithFrame:CGRectMake(x, y, w, h)];
webView.delegate = self;
// ...
return self;
}
- (BOOL)webView:(UIWebView *)wv shouldStartLoadWithRequest:(NSURLRequest *)rq
{
[activityIndicator startAnimating];
return YES;
}
- (void)webViewDidFinishLoading:(UIWebView *)wv
{
[activityIndicator stopAnimating];
}
- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error
{
[activityIndicator stopAnimating];
}
@end
2
您將希望聽取網絡視圖委託回調以正確顯示您的活動指示器。
具體來說,你會想傾聽:
webViewDidStartLoad:(啓動活動的指標動畫)
webViewDidFinishLoad:(到底)
web視圖:didFailLoadWithError:(到底)
5
執行UIWebViewDelegate
協議 這些都是你需要在你的代碼來實現代表:
- (void)webViewDidStartLoad:(UIWebView *)webView; //a web view starts loading
- (void)webViewDidFinishLoad:(UIWebView *)webView;//web view finishes loading
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error; //web view failed to load
0
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.webViewRef.delegate = self;
NSURL *websiteUrl = [NSURL URLWithString:Constants.API_TERMS_AND_CONDITIONS_URL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:websiteUrl];
[self.webViewRef loadRequest:urlRequest];
}
#pragma mark
#pragma mark -- UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
[self.activityIndicator startAnimating];
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
[self.activityIndicator startAnimating];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[self.activityIndicator stopAnimating];
self.activityIndicator.hidden = YES;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{
[self.activityIndicator stopAnimating];
self.activityIndicator.hidden = YES;
}
相關問題
- 1. 將活動指示器添加到UIAlertView
- 2. 如何將活動指示器添加到圖像加載
- 3. 將圖像添加到ios中的活動指示器
- 4. 將視圖添加到活動
- 5. 活動指示器直到加載下一個視圖
- 6. 將活動指示器添加到導航欄
- 7. 在webview上添加活動指示器
- 8. 將活動指示器添加到另一視圖以查看另一個視圖時發生內存泄漏
- 9. iOS:在正確的位置添加活動指示器(主視圖控制器)
- 10. 將視圖添加到滾動視圖
- 11. 到活動添加視圖編程
- 12. 如何在飛濺圖像上添加活動指示器
- 13. 將滑動視圖添加到導航抽屜活動
- 14. 如何將滾動視圖添加到整個活動?
- 15. 將項目添加到列表視圖到另一個活動
- 16. 添加一個活動指示器到標籤欄
- 17. 將地圖添加到我的活動
- 18. 將意圖添加到活動
- 19. 將視圖控制器並排添加到滾動視圖中
- 20. 將一個活動指示器添加到tableview單元格的左側
- 21. 將加載指示器添加到Google地圖infoWindow
- 22. 將活動添加到ListView
- 23. 將活動添加到iCal
- 24. 安卓:如何將兩個視圖添加到一個活動
- 25. 將活動添加到fullCalendar,議程視圖
- 26. 將項目添加到其他活動的列表視圖
- 27. Android AsyncTask:將視圖添加到AsyncTask中的活動?
- 28. 活動指示燈不顯示視圖控制器
- 29. 在swift 2.0中顯示活動指示器3秒錶視圖
- 30. 使用列表活動將列表視圖添加到佈局/活動w.o
順便說一句,在'didFailLoadWithError'中,如果你曾經想做一些類似的事情來告訴用戶一些網頁瀏覽問題,值得注意的是'error.code == NSURLErrorCancelled'不是一個致命錯誤,而是一個指示UIWebView將嘗試轉到另一個頁面(或者是因爲用戶在加載過程中點擊鏈接,有時甚至是因爲網站本身正在重定向用戶)。總之,如果你打算在'didFailLoadWithError'中做更全面的事情,你可能想檢查'error.code!= NSURLErrorCancelled'。 – Rob
是的,但它不是OP問題的一部分。 – 2012-07-05 05:41:56
同意。沒有打算批評。只需觀察user1502286就可以知道這些非常直觀的'UIWebViewDelegate'方法的奇怪小怪癖。 – Rob