UIActivityIndi​​catorView不会消失

时间:2011-07-02 07:54:09

标签: iphone objective-c xcode interface-builder uiactivityindicatorview

这似乎是一个非常简单的问题,但我确实无法让它发挥作用。

我的应用程序的一部分将我的用户带到显示我的网站的WebView。作为内置“浏览器”体验的一部分,我想要一个UIActivityIndi​​cator,让用户知道网站正在加载。显然,当这样做时,我希望指标消失。

此时,活动指示器会动画,但随后会保持动画状态,不会停止或消失。

我在.h中使用的代码如下;

@interface AppSupportWebsite : UIViewController <UIWebViewDelegate> {

    IBOutlet UIActivityIndicatorView *activityIndicator;

}

@property (nonatomic, retain) UIActivityIndicatorView *activityIndicator;

@end

在我的.m文件中,我有以下内容; (缩写为只显示活动指标特定代码)

@synthesize activityIndicator;


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

}

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

我在Interface Builder中创建了一个活动指示器,并通过文件所有者将activityIndi​​cator IBOutlet通过IB连接到白色活动指示器,但它不会消失。

4 个答案:

答案 0 :(得分:4)

选择你的活动指标然后

CMD + 1

选择“停止时隐藏”

检查你的webview.delegate = self;

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    NSLog(@"finished");

    [self.activityIndicator stopAnimating];

}

答案 1 :(得分:1)

这只是黑暗中的一个问题,但是您可能遇到问题,因为UIWebView Delegate是从主线程以外的其他线程调用的。所以你可能会因此获得一些竞争条件。

尝试使用此Grand Central Dispatch Code(GCD)并告知我是否有效:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    dispatch_async(dispatch_get_main_queue(), ^(void) {
      [activityIndicator stopAnimating];
    });
}

答案 2 :(得分:0)

你能在webViewDidFinishLoad方法中添加一个NSLog语句(就像NSLog(@“Web Finished Loading!”););我的猜测是这个方法没有被调用。可能有几个原因。例如,如果您在点击方法之前释放webView,则可能根本不会调用该方法。

答案 3 :(得分:0)

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

可以在您的网站有多个重定向的情况下多次运行上面的代码。所以我不建议把这一行放在这个委托方法中。我建议把它放在ViewController的viewWillAppear委托方法中。

-(void)viewWillAppear:(BOOL)animated{
   [activityIndicator startAnimating];
}

另外,请确保在xib中绑定UIActivityIndi​​cator。

希望得到这个帮助。