From 7d77acf8123816961325d0e41b83db065ee2dcde Mon Sep 17 00:00:00 2001 From: Jose Ventura Date: Tue, 19 Feb 2013 13:13:17 -0300 Subject: [PATCH] Add delegation to expose webview if needed --- SVWebViewController/SVModalWebViewController.h | 8 +++++++- SVWebViewController/SVModalWebViewController.m | 18 +++++++++++++++++- SVWebViewController/SVWebViewController.h | 7 +++++++ SVWebViewController/SVWebViewController.m | 9 ++++++--- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/SVWebViewController/SVModalWebViewController.h b/SVWebViewController/SVModalWebViewController.h index 2f7a072..6859502 100644 --- a/SVWebViewController/SVModalWebViewController.h +++ b/SVWebViewController/SVModalWebViewController.h @@ -18,9 +18,14 @@ enum { typedef NSUInteger SVWebViewControllerAvailableActions; - @class SVWebViewController; +@protocol SVModalWebViewControllerDelegate +-(void)webViewDidStartLoad:(UIWebView*)webView; +-(void)webViewDidFinishLoad:(UIWebView*)webView; +-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError *)error; +@end + @interface SVModalWebViewController : UINavigationController - (id)initWithAddress:(NSString*)urlString; @@ -28,5 +33,6 @@ typedef NSUInteger SVWebViewControllerAvailableActions; @property (nonatomic, strong) UIColor *barsTintColor; @property (nonatomic, readwrite) SVWebViewControllerAvailableActions availableActions; +@property (nonatomic, weak) id webViewDelegate; @end diff --git a/SVWebViewController/SVModalWebViewController.m b/SVWebViewController/SVModalWebViewController.m index 94dc079..9596143 100644 --- a/SVWebViewController/SVModalWebViewController.m +++ b/SVWebViewController/SVModalWebViewController.m @@ -9,7 +9,7 @@ #import "SVModalWebViewController.h" #import "SVWebViewController.h" -@interface SVModalWebViewController () +@interface SVModalWebViewController () @property (nonatomic, strong) SVWebViewController *webViewController; @@ -29,6 +29,7 @@ - (id)initWithAddress:(NSString*)urlString { - (id)initWithURL:(NSURL *)URL { self.webViewController = [[SVWebViewController alloc] initWithURL:URL]; + self.webViewController.delegate = self; if (self = [super initWithRootViewController:self.webViewController]) { self.webViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:webViewController action:@selector(doneButtonClicked:)]; } @@ -45,4 +46,19 @@ - (void)setAvailableActions:(SVWebViewControllerAvailableActions)newAvailableAct self.webViewController.availableActions = newAvailableActions; } +#pragma mark - WebView delegate +- (void)webViewDidStartLoad:(UIWebView *)webView { + [self.webViewDelegate webViewDidStartLoad:webView]; +} + + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; + [self.webViewDelegate webViewDidFinishLoad:webView]; +} + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { + [self.webViewDelegate webView:webView didFailLoadWithError:error]; +} + @end diff --git a/SVWebViewController/SVWebViewController.h b/SVWebViewController/SVWebViewController.h index 78d8408..7346c09 100644 --- a/SVWebViewController/SVWebViewController.h +++ b/SVWebViewController/SVWebViewController.h @@ -10,11 +10,18 @@ #import "SVModalWebViewController.h" +@protocol SVWebViewControllerDelegate +-(void)webViewDidStartLoad:(UIWebView*)webView; +-(void)webViewDidFinishLoad:(UIWebView*)webView; +-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError *)error; +@end + @interface SVWebViewController : UIViewController - (id)initWithAddress:(NSString*)urlString; - (id)initWithURL:(NSURL*)URL; +@property (nonatomic, weak) id delegate; @property (nonatomic, readwrite) SVWebViewControllerAvailableActions availableActions; @end diff --git a/SVWebViewController/SVWebViewController.m b/SVWebViewController/SVWebViewController.m index 9e71322..e876e94 100644 --- a/SVWebViewController/SVWebViewController.m +++ b/SVWebViewController/SVWebViewController.m @@ -287,21 +287,24 @@ - (void)updateToolbarItems { #pragma mark UIWebViewDelegate - (void)webViewDidStartLoad:(UIWebView *)webView { - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; [self updateToolbarItems]; + [self.delegate webViewDidStartLoad:webView]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; self.navigationItem.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"]; [self updateToolbarItems]; + [self.delegate webViewDidFinishLoad:webView]; } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; [self updateToolbarItems]; + [self.delegate webView:webView didFailLoadWithError:error]; } #pragma mark - Target actions