0

私はこれが非常に一般的な質問であることを知っています、私はスタックオーバーフローで尋ねられた質問のほとんどを読みましたが、それでもビューからuiactivityindicatorviewを削除する方法を理解できませんでした。コードの下を見つけてください

@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];
}

ヘッダーファイル

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

また、IBのチェックボックスをオンにしました。停止すると非表示になります。webViewFinishLoadメソッドを入れNSLog(@"in webViewDidFinishLoad")ましたが、何らかの理由でそのメソッドにヒットしないようです。とのために

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

viewDidLoadメソッドでは、コンソールに次のようなメッセージが表示されます

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

2 に答える 2

3

関数webViewDidFinishLoadが呼び出されていない可能性があります。WebビューがURLを開かない場合に発生する可能性があります。いずれの場合も、webView:didFailLoadWithError:メソッドを実装し、そこでアクティビティインジケータも停止する必要があります。

-編集-

UIWebViewからイベントを受信するには、コントローラーをUIWebViewのデリゲートとして設定する必要があります。UIWebViewDelegateを実装するだけでは不十分です。これを行うには、次のようにメソッドを更新viewDidLoadします。

-(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"]]];
}
于 2010-12-23T18:15:44.380 に答える
0

コードに行を追加NSLog(@"in webViewDidFinishLoad")し、コンソールを監視して、コードがそれらのポイントに到達するかどうかを確認する必要があります。これは非常に単純な例なので、おそらくm_activityは実際のオブジェクトに接続されていませんか?これをviewDidLoadの最後に追加するときに、アドレスまたはnullを取得するかどうかを確認してください。

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

于 2010-12-23T19:43:35.777 に答える