2010-12-23 17 views
0

ich weiß, das ist eine sehr häufige Frage, ich lese die meisten Fragen in stackoverflow gestellt, aber immer noch nicht herausfinden, wie Sie die uiactivityindicatorview aus der Sicht entfernen. bitte unter dem Code findeniphone - uiactivityindicatorview versteckt sich nicht

@implementation FeedBackViewController 
@synthesize m_activity,webView; 

-(void)viewDidLoad{ 

    [super viewDidLoad]; 


    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://equinox.library.pitt.edu/limesurvey/index.php?sid=87435&lang=en"]]]; 


} 

- (void)dealloc { 
    [m_activity release]; 
    [webView release]; 
    [super dealloc]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    [m_activity stopAnimating]; 
    [m_activity removeFromSuperview]; 
    m_activity = nil; 
} 

- (void)webViewDidStartLoad:(UIWebView *)webView { 
NSLog(@"in webViewDidFinishLoad")  
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    m_activity.center = self.view.center; 
    [self.view addSubview: m_activity]; 
    [m_activity startAnimating]; 
} 

die Header-Datei

@interface FeedBackViewController : UIViewController<UIWebViewDelegate>{ 
    IBOutlet UIWebView *webView;   
    IBOutlet UIActivityIndicatorView *m_activity; 
} 
@property (nonatomic, retain) IBOutlet UIWebView *webView; 
@property (nonatomic, retain) UIActivityIndicatorView *m_activity; 

Auch ich habe die Box in der IB überprüft, die sagt, verstecken, wenn gestoppt. Ich setze NSLog(@"in webViewDidFinishLoad") in der webViewFinishLoad Methode, scheint, dass es diese Methode aus irgendeinem Grund nicht trifft. und für

NSLog(@"m_activity = %@",m_activity); 

im viewDidLoad Methode, gibt es eine Meldung, wie unten in der Konsole

> m_activity = <UIActivityIndicatorView: 
> 0x4d3d920; frame = (150 79; 20 20); 
> hidden = YES; opaque = NO; autoresize 
> = RM+BM; layer = <CALayer: 0x4d35ce0>> 
+0

Randbemerkung: Sie rufen sollen 'release' auf' m_activity', bevor es zu 'nil' Einstellung . – donkim

Antwort

3

Ihre webViewDidFinishLoad Funktion wahrscheinlich nicht aufgerufen werden. Es kann vorkommen, wenn die Webansicht die URL nicht öffnet. In jedem Fall sollten Sie auch die Methode webView:didFailLoadWithError: implementieren und dort auch den Aktivitätsindikator stoppen.

-edit-

Um Ereignisse von UIWebView Sie benötigen erhalten den Controller, wie die UIWebView des Delegierten zu setzen. Die Implementierung von UIWebViewDelegate ist nicht ausreichend. Sie können dies tun, indem Sie die Aktualisierung viewDidLoad Methode wie folgt:

-(void)viewDidLoad{ 
[super viewDidLoad]; 

webView.delegate = self; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://equinox.library.pitt.edu/limesurvey/index.php?sid=87435&lang=en"]]]; 
} 
+0

@murat ... ich habe die Methode webView hinzugefügt: didFailLoadWithError method..still der Indikator hängt immer noch um –

+0

haben Sie den Controller als Delegierter des UIWebView gesetzt? – murat

+0

@murat ... Könnten Sie bitte auf, was Sie gerade gesagt haben.Ich bin neu auf iPhone dev ... –

0

Sie NSLog(@"in webViewDidFinishLoad") Zeilen Code hinzufügen sollten und beobachten Sie die Konsole, um zu sehen, ob der Code die Punkte trifft. Da dies ein sehr einfaches Beispiel ist, ist m_activity möglicherweise nicht mit dem tatsächlichen Objekt verbunden? Versuchen Sie, um zu sehen, ob Sie eine Adresse oder null, wenn Sie dies Ihrer viewDidLoad bis zum Ende hinzufügen:

NSLog(@"m_activity = %@",m_activity);

+0

die Konsole zeigt eine Adresse für m_activity aber es trifft nicht die WebViewDidFinishLoad Methode ... ich schrieb nur NSLog (@ "in webViewDidFinishLoad") in dieser Methode .. was könnte der Grund sein? –

Verwandte Themen