2009-08-21 8 views
9

मैं जानना चाहता हूं कि वेबव्यू आधारित ऐप में एक गतिविधि इंडिकेटर को कैसे कार्यान्वित किया जाए, मैंने निम्नलिखित कोड लिखा लेकिन संकेतक प्रकट नहीं होता है।UIWebView लोड होने पर UIActivityIndicatorView को कैसे कार्यान्वित करें? (आईफोन ओबीजेसी)

वेबव्यू लोड फ़ाइल स्थानीय रूप से, तो यह बहुत तेजी से लोड करते हैं, लेकिन जब यह एक बाहरी पृष्ठ लोड यह धीमी गति से लोड और मैं सूचक जरूरत है ...

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

क्या यहां मुद्दा यह है, कोड आप पो उपरोक्त स्टड को काम करना चाहिए, सिवाय इसके कि आप कहीं भी सूचक को प्रारंभ नहीं करते हैं (शायद आप डीडलोड में देखते हैं) लेकिन ऊपर दिखाए गए कोड को यह काम करना चाहिए कि सूचक को सही ढंग से प्रारंभ किया गया था और आपने वेबवेव डी को दृश्य नियंत्रक के लिए सेट किया है, मेरे पास यह है मेरे कुछ ऐप्स पर काम करना जहां मैं वेबव्यू और संकेतक का उपयोग करता हूं यह इंगित करने के लिए ...

19

आप अपने गतिविधि संकेतक को अपने init में क्यों सेट कर रहे हैं?

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

सुपर करने के लिए कॉल अपने XIB से अपने सूचक प्रारंभ (यह मानते हुए आप आईबी में अपने आउटलेट से यह जुड़ा हुआ) है, लेकिन फिर आप शून्य के संदर्भ में सेट कर रहे हैं के बाद यह शुरू कर दिया गया है। उस रेखा को हटा दें। फिर इंटरफ़ेस बिल्डर में वापस जाएं और "बंद होने पर छुपाएं" चेकबॉक्स सेट करें।

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

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

"छिपाएँ जब बंद कर दिया" सूचक को छिपाने के लिए जब आप एनिमेट से रोकने का कारण बनता है: अब आप अपने कोड है कि संकेतक प्रदर्शित करता है को आसान बनाने में कर सकते हैं।

+2

क्या आपको इसे 'didFailLoadWithError' विधि' में बंद करने की आवश्यकता नहीं है? –

0

UIWebView.loading संपत्ति का भी उपयोग किया जा सकता है।

एप्पल डॉक: @property (nonatomic, केवल पढ़ने के लिए, गेटर = isLoading) BOOL लोड हो रहा है विवरण एक बूलियन यह बताते हैं कि रिसीवर सामग्री लोड किया जाता है मूल्य। (केवल पढ़ने के लिए) यदि हां, तो रिसीवर अभी भी सामग्री लोड कर रहा है; अन्यथा, नहीं।

आईओएस 6 में ऐसा लगता है कि ऐप्पल ने इस संपत्ति के साथ कुछ मुद्दों को भी ठीक किया है। http://code-gotcha.blogspot.fi/2012/08/uiwebviewloading-in-ios-6-fixed.html

संबंधित मुद्दे