My myViewController.h contains:
#import <UIKit/UIKit.h>
@interface myViewController : UIViewController {
UIScrollView *myScrollView;
UIView *mySubView;
UIWebView *myWebView;
UIActivityIndicatorView *myIndicator;
}
@property (nonatomic, retain) IBOutlet UIScrollView *myScrollView;
@end
My myViewController.m contains:
#import "myViewController.h"
@implementation myViewController
@synthesize myScrollView;
...
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *bgColors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
for (int i = 0; i < bgColors.count; i+开发者_JAVA百科+)
{
CGRect frameNew;
frameNew.origin.x = self.myScrollView.frame.size.width * i;
frameNew.origin.y = 0;
frameNew.size = self.myScrollView.frame.size;
mySubView = [[UIView alloc] initWithFrame:frameNew];
mySubView.backgroundColor = [bgColors objectAtIndex:i];
[self.myScrollView addSubview:mySubView];
myIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
myIndicator.center = CGPointMake(160, 100);
myIndicator.hidesWhenStopped = NO;
CGRect webFrame = CGRectMake(self.myScrollView.frame.size.width * i, 0, 320, 320);
myWebView = [[UIWebView alloc] initWithFrame:webFrame];
[myWebView setDelegate:(id)self];
[myWebView addSubview:myIndicator];
NSString *urlAddress = @"http://www.google.com/";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:requestObj];
[self.myScrollView addSubview:myWebView];
[myIndicator release];
[myWebView release];
[mySubView release];
}
self.myScrollView.contentSize = CGSizeMake(self.myScrollView.frame.size.width * bgColors.count, self.myScrollView.frame.size.height);
}
-(void)webViewDidStartLoad: (UIWebView *)webView
{
NSLog(@"Web view did start loading");
[myIndicator startAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
-(void)webViewDidFinishLoad: (UIWebView *)webView
{
NSLog(@"Web view did finish loading");
[myIndicator stopAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
[myIndicator stopAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
NSString* errorString = [NSString stringWithFormat:@"<html>%@</html>", error.localizedDescription];
[myWebView loadHTMLString:errorString baseURL:nil];
}
...
Load indicator does not work on the first two mySubView
in myWebView
, works only on the last mySubView
in myWebView
.
In the first two mySubView
in myWebView
, myIndicator
displayed but not active.
Tell me what's wrong doing?
That is because myIndicator
is pointing to the last activity indicator view. All previous references are lost. Luckily, since it is a subview of the web view, we can get a reference to it. This should help –
-(void)webViewDidStartLoad: (UIWebView *)webView
{
UIActivityIndicatorView *actView;
for ( id object in webView.subviews ) {
if ([object isMemberOfClass:[UIActivityIndicatorView class]]) {
actView = (UIActivityIndicatorView*)object;
}
}
NSLog(@"Web view did start loading");
[actView startAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
-(void)webViewDidFinishLoad: (UIWebView *)webView
{
UIActivityIndicatorView *actView;
for ( id object in webView.subviews ) {
if ([object isMemberOfClass:[UIActivityIndicatorView class]]) {
actView = (UIActivityIndicatorView*)object;
}
}
NSLog(@"Web view did finish loading");
[actView stopAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
UIActivityIndicatorView *actView;
for ( id object in webView.subviews ) {
if ([object isMemberOfClass:[UIActivityIndicatorView class]]) {
actView = (UIActivityIndicatorView*)object;
}
}
[actView stopAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
NSString* errorString = [NSString stringWithFormat:@"<html>%@</html>", error.localizedDescription];
[myWebView loadHTMLString:errorString baseURL:nil];
}
精彩评论