这似乎是一个非常简单的问题,但我确实无法让它发挥作用。
我的应用程序的一部分将我的用户带到显示我的网站的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];
}
我在Interface Builder中创建了一个活动指示器,并通过文件所有者将activityIndicator IBOutlet通过IB连接到白色活动指示器,但它不会消失。
答案 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中绑定UIActivityIndicator。
希望得到这个帮助。