This chapter wraps up its discussion of controls by discussing the web view. The UIWebView is the class you use to add a web browser to your application. It’s based upon the same code foundation as Safari, and so you can use CSS and JavaScript. Using the web view can be easy, or more difficult, depending upon how much you wish your application to interact with the browser. In this chapter you keep it simple.
The UIWebView is responsible for the web view’s display. It is an easy means of embedding web content in your application. The loadRequest: method is how you load web content. You can check on the control’s progress loading a resource using the loading property. You might also wish moving forward or backward through the user’s browsing history; you do this using the goBack and goForward methods. And of course, you can first check to see if the control can move backwards or forwards by checking the canGoBack or canGoForward properties. If you own an iPhone, then I am certain you have noticed that you can tap telephone numbers in the Safari browser and it automatically dials the number. The UIWebView automatically implements this behavior unless you specifically inform it not to by setting the detectsPhoneNumbers property to NO. Another method that is subtle, yet powerful is the stringByEvaluatingJavaScriptFromString: method. - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script Why is this method so powerful? The stringByEvaluatingJavaScriptFromString: method allows evaluating any JavaScript string. You can access a page’s Document Object Model (DOM) through JavaScript, and so you can manipulate an HTML page’s content. The HTML DOM is a W3C standard for manipulating HTML documents. HTML DOM is outside this book’s scope, but for more information refer to the W3C School’s HTML DOM Tutorial, available online at www.w3schools.com. If you wish programming using the web browser you would be well served by learning the HTML DOM. The following Try This example, illustrates using the stringByEvaluatingJavaScriptFromString: method to print a page’s HTML content.You navigate to a specific page by using the UIWebView’s loadRequest method. - (void) loadRequest: (NSURLRequest *) request The loadRequest method takes a URL request as a parameter and navigates to the resource represented by the underlying URL. A NSURL class wraps the NSURLRequest’s underlying URL. Both the NSURLRequest and NSURL are part of the Foundation framework. You use both in the next Try This example application.
UIWebViews can also have a delegate. You create a delegate for a UIWebView by creating a class that adopts the UIWebViewDelegate protocol and then assigning the UIWebView’s delegate property to the custom class. The UIWebViewDelegate handles key events when loading a web page. When an event occurs, the web view calls the appropriate delegate method. For instance, when a web view is about to load a page it calls the webView:should StartLoadWithRequest:navigationType: method.
request navigationType:(UIWebViewNavigationType)navigationType When a web view starts loading a page it calls the webViewDidStartLoad: method.
When a web view finishes loading a page it calls the webViewDidFinishLoad: method, unless an error occurs, and instead it calls the webView:didFailLoadWithError: method.
1. Create a new View-based Application named MyWeb. 2. Create a new class called MyWebViewDelegate and have it adopt the UIWebViewDelegate protocol (Listings 12-10 and 12-11). 3. Open MyWebViewController.xib in Interface Builder. 4. Add a Web View from the Library to the canvas. Also add a text field and a button
Figure 12-29 A simple web browser in Interface Builder
Figure 12-30 A simple web browser displaying Apple’s home page
Listing 12-10 MyWebViewDelegate.h #import <Foundation/Foundation.h> @interface MyWebViewDelegate : NSObject <UIWebViewDelegate> { } @end Listing 12-11 MyWebViewDelegate.m #import "MyWebViewDelegate.h" @implementation MyWebViewDelegate - (void)webViewDidFinishLoad: (UIWebView *) webView { NSLog(@"%@", [webView stringByEvaluatingJavaScriptFromString: @"document.documentElement.textContent"]); } @end Listing 12-12 MyWebViewController.h #import <UIKit/UIKit.h> #import "MyWebViewDelegate.h" @interface MyWebViewController : UIViewController { IBOutlet UITextField * myTextField; IBOutlet UIWebView * myWebView; MyWebViewDelegate * myWebViewDelegate; } @property(nonatomic, retain) UIWebView * myWebView; @property(nonatomic, retain) UITextField * myTextField; @property(nonatomic, retain) MyWebViewDelegate * myWebViewDelegate; - (IBAction) changeLocation: (id) sender; @end Listing 12-13 MyWebViewController.m #import "MyWebViewController.h" @implementation MyWebViewController @synthesize myWebView; @synthesize myTextField; @synthesize myWebViewDelegate;
myWebViewDelegate = [[MyWebViewDelegate alloc] init]; myWebView.delegate = myWebViewDelegate; }
[super dealloc]; }
NSURL * url = [NSURL URLWithString: myTextField.text]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; [myWebView loadRequest:request]; } @end
You liked the article?
Like : 0
Vote for difficulty
Current difficulty (Avg): Medium
1/15
TekSlate is the best online training provider in delivering world-class IT skills to individuals and corporates from all parts of the globe. We are proven experts in accumulating every need of an IT skills upgrade aspirant and have delivered excellent services. We aim to bring you all the essentials to learn and master new technologies in the market with our articles, blogs, and videos. Build your career success with us, enhancing most in-demand skills in the market.
Stay Updated
Get stories of change makers and innovators from the startup ecosystem in your inbox