2009-08-21 9 views
9

WebViewベースのアプリケーションでactivityIndi​​catorを実装する方法を知りたいので、次のコードを書きましたが、インジケータは表示されません。それは非常に高速な読み込み、それは外部のページをロードするとき、それは遅いロードと私はインジケータを必要とするので、 UIWebViewが読み込み中の場合、UIActivityIndi​​catorViewをどのように実装しますか? (iPhone ObjC)

ローカルの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"); 
} 

答えて

2

いただきましたここでの問題は、コードあなた経口あなたがどこでも(どこかでviewDidLoadで行う)インジケータを初期化しないことを除いて、上記のstedはうまくいくはずですが、上記のコードは、インジケータが正しく初期化され、ビューコントローラにwebview d elegateをセットした場合に動作するはずです。いくつかの私のアプリで働いているところでは、Webビューとインジケータを使ってロード中のことを表示します。

19

なぜあなたのinitでアクティビティインジケータをnilに設定していますか?

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

スーパーへの呼び出しは(あなたがIBであなたのコンセントに接続仮定して)あなたのXIBからあなたインジケータを初期化し、それが初期化されていた後、あなたはゼロへの参照を設定しています。その行を削除します。その後、インターフェースビルダーに戻って、「停止時に非表示にする」チェックボックスを設定します。

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

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

「停止時に非表示にする」は、アニメーションを停止したときに表示が非表示になるようにします。

+2

'didFailLoadWithError'メソッドでもオフにする必要はありませんか? –

0

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

AppleのDOC: @property(非アトミック、読み取り専用、ゲッター= isLoading)BOOLローディング 説明受信機がコンテンツをロード行われるかどうかを示すブール値。 (読み取り専用) YESの場合、受信者はまだコンテンツをロードしています。そうでなければNO。

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

関連する問題