2011-05-23 89 views
0
工作程序的UIWebView

我myViewController.h包含:UIActivityIndi​​catorView不mySubView

#import <UIKit/UIKit.h> 

@interface myViewController : UIViewController { 

    UIScrollView *myScrollView; 

    UIView *mySubView; 

    UIWebView *myWebView; 

    UIActivityIndicatorView *myIndicator; 

} 

@property (nonatomic, retain) IBOutlet UIScrollView *myScrollView; 

@end 

我myViewController.m包含:

#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++) 
    { 
     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]; 
} 

... 

负载指示灯不myWebView前两个mySubView工作,仅在最后的mySubViewmyWebView上有效。

在前两个mySubViewmyWebViewmyIndicator显示,但不是活动的。

告诉我这是怎么回事?

回答

4

这是因为myIndicator指向上一个活动指示器视图。以前的所有参考都将丢失。幸运的是,由于它是Web视图的子视图,因此我们可以参考它。这应该有所帮助 -

-(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]; 
} 
+0

而您的最后一个参考是不可靠的,因为您已经在for循环结束时发布了它。你放弃了所有权,所以它可能指向垃圾。它仍然有效,因为Web视图对象通过将对象保留为其子视图来保持对象的活性。 – 2011-05-23 07:56:45

+0

我没有得到你。解决方案是什么?代码不适合你吗?你得到的错误是什么? – 2011-05-23 08:50:53

+0

立即我看到你的代码..是的所有工作......非常感谢你,非常有帮助... – scazy0rg 2011-05-23 08:58:27

相关问题