2013-07-23 30 views
0

我认为用UIWebView(和delegate = self)对每个viewController实现完全相同的方法并不聪明。所以试图设置所有UIWebView的通用加载方法。但它没有奏效。 用类别实现是否是错误的?按类别常见的webViewDidStartLoad

的UIWebView + Loading.m

-(void)webViewDidStartLoad:(UIWebView*)webView 
{ 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
} 

ViewController.h

@interface ViewController : UIViewController <UIWebViewDelegate> 

ViewController.m

#import "UIWebView+Loading.h" 

//abbr... 

-(void)viewWillAppear:(BOOL)animated 
{ 
    UIWebView *someWebView = [[UIWebView alloc] init]; 
    someWebView.delegate = self; 

    //and HTTP request 
    NSURLRequest *req = (abbr); 
    [someWebView loadRequest:req]; 
} 

回答

1

Ť他的方法webViewDidStartLoad:未被调用,因为它是UIWebViewDelegate协议的一部分,而不是UIWebView类的方法本身。您必须在您的ViewController.m文件中实现它。

此外,您可能想了解delegation pattern in iOS

+0

我明白用UIWebView的类别是错误的。我该如何实现它?我认为使用UIWebView(和delegate = self)对每个viewController实现完全相同的方法并不聪明。我会阅读委派模式,谢谢。 – tosin

+0

如果你有更多的包含UIWebView的视图控制器,你可以为它们创建一个超类(UIViewControllerWithWebView)并在其中实现UIWebViewDelegate方法。 –

0

为此,不需要像UIWebView + Loading.m这样的类别。

web视图的委托方法将得到执行时加载统计数据和委托方法

- (void)webViewDidStartLoad:(UIWebView *)webView { 
    NSLog(@"Started loading"); 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSLog(@"Finshed loading"); 
} 

将让你写的是enough.Since委托设置为自我。在视图 - 控制定义这些executed.The代码方法和多数民众赞成它。你会有它的工作

+0

谢谢,但我想制作一个通用的UIWebView(或UIWebViewDelegate)类,它预先设置了“webViewDidStartLoad”。 – tosin