这似乎是一个非常简单的问题,但我真的不能让它工作。
我有我的应用程序的一部分,这将我的用户带到一个显示我的网站的WebView。作为内置的‘浏览器’经验的一部分,我想要一个UIActivityIndicator的位置,让用户知道网站正在加载。显然,当这件事完成后,我希望指示器消失。
此时,活动指示器处于动画状态,但随后将一直处于动画状态,并且不会停止或消失。
我在.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];
}我已经在界面生成器中创建了一个活动指示器,并通过文件所有者通过IB将activityIndicator IBOutlet连接到白色活动指示器,但它就是不会消失。
发布于 2011-07-02 16:22:05
选择您的活动指示器,然后
cmd+1
选择“停止时隐藏”
检查您的webview.delegate=self;
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"finished");
[self.activityIndicator stopAnimating];
}发布于 2011-07-02 16:22:50
这只是一个暗箭,但您可能会遇到问题,因为UIWebView委托是从主线程以外的其他线程调用的。因此,您可能会因此获得一些竞争条件。
试一下这个中央调度码(GCD),让我知道它是否有效:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
dispatch_async(dispatch_get_main_queue(), ^(void) {
[activityIndicator stopAnimating];
});
}发布于 2011-07-02 16:09:23
您是否可以向webViewDidFinishLoad方法添加一条NSLog语句(就像NSLog(@“网络已完成加载!”);)?我的猜测是这个方法没有被调用。这可能有几个原因。例如,如果您在命中方法之前释放webView,则它可能根本不调用该方法。
https://stackoverflow.com/questions/6555801
复制相似问题