9

WebView ベースのアプリで activityIndi​​cator を実装する方法を知りたくて、次のコードを書きましたが、インジケーターが表示されません。

webview はファイルをローカルにロードするため、非常に高速にロードされますが、外部ページをロードするとロードが遅くなり、インジケータが必要です...

FirstViewController.h

 #import <UIKit/UIKit.h>

 @interface FirstViewController : 
 UIViewController <UIWebViewDelegate>{
    IBOutlet UIWebView *webview1;   
    NSURL *urlLocation;     
    IBOutlet UIActivityIndicatorView *m_activity; 
 }

 @property (nonatomic, retain) UIActivityIndicatorView *m_activity;

 - (IBAction)searchbutton:(id)sender;
 - (IBAction)home:(id)sender;

 @end

FirstViewController.m

 #import "FirstViewController.h"

 @implementation FirstViewController


 @synthesize m_activity;

 // viewWillAppear loads every time younopen up this View

 - (void)viewWillAppear:(BOOL)animated {
   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];          
   urlLocation = [NSURL fileURLWithPath:filePath];  
   [webview1 loadRequest:[NSURLRequest requestWithURL:urlLocation]]; 
 }




 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     
  if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {      
     //Initialization code      
     m_activity = nil;  
   }    
   return self; 
 }

 - (void)webViewDidFinishLoad:(UIWebView *)webView {    
   m_activity.hidden= TRUE;     
   [m_activity stopAnimating];  
   NSLog(@"Web View started loading...");
 }

 - (void)webViewDidStartLoad:(UIWebView *)webView {     
   m_activity.hidden= FALSE;    
   [m_activity startAnimating];     
   NSLog(@"Web View Did finish loading");
 }
4

3 に答える 3

19

init でアクティビティ インジケーターを nil に設定するのはなぜですか?

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     
  if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {      
     //Initialization code      
     m_activity = nil;  
   }    
   return self; 
}

XIB からインジケーターを超初期化する呼び出し (IB のアウトレットに接続したと仮定) が、初期化後に nil への参照を設定しています。その行を削除します。次に、インターフェースビルダーに戻り、「停止時に非表示」チェックボックスを設定します。これで、インジケーターを表示するコードを簡素化できます。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
   [m_activity stopAnimating];  
}

- (void)webViewDidStartLoad:(UIWebView *)webView {     
   [m_activity startAnimating];     
}

「停止時に非表示」を使用すると、アニメーションを停止するとインジケーターが非表示になります。

于 2009-08-21T14:49:05.513 に答える
2

ここでの問題は何ですか。インジケーターをどこにも初期化しないことを除いて(おそらくviewDidLoadで行う)、上記のコードは機能するはずですが、インジケーターが正しく初期化され、webviewデリゲートをに設定すると、上記のコードは機能するはずですそこにビューコントローラーがあり、ウェブビューとインジケーターを使用していつロードするかを示すいくつかのアプリで動作しています...

于 2009-08-21T13:10:30.747 に答える
0

UIWebView.loading プロパティも使用できます。

Apple のドキュメント: @property(nonatomic, readonly, getter=isLoading) BOOL loading 説明 レシーバーがコンテンツの読み込みを完了したかどうかを示すブール値。(読み取り専用) YES の場合、受信者はまだコンテンツを読み込んでいます。そうでなければ、いいえ。

iOS6 では、Apple がこのプロパティに関するいくつかの問題も修正したようです。http://code-gotcha.blogspot.fi/2012/08/uiwebviewloading-in-ios-6-fixed.html

于 2012-08-27T12:46:01.770 に答える