cdietschrun cdietschrun - 11 months ago 50
iOS Question

How do I add a UIWebView to my iOS app?

I have an app at the moment that when a button is pushed on the first screen does some work and makes a URL, and then does

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:currentURL]];

which launches Safari with my URL. I want instead to have a webview launch from here so the user can do some custom things with it. I am still having a hell of a time understanding MVC in iOS and need help. My project is minimal and consists of an AppDelegate.h/m and a ViewController.h/m, the.m of the view controller is where the function that does this Safari launch lives.

Can anyone help me understand how to do what I'm trying to d?


Ned Ned
Answer Source

The simplest way is just to add a UIWebView when the button gets pressed. Add this method to your ViewController.m and have this be performed when the button gets pressed.


//This method should get called when you want to add and load the web view
- (void)loadUIWebView
    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];  //Change self.view.bounds to a smaller CGRect if you don't want it to take up the whole screen
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:currentURL]]];
    [self.view addSubview:webView];
    [webView release];

Using Interface Builder:

1) Add a UIWebView object to your interface.

2) Set the "hidden" property to checked (in the "Attributes Inspector" window in Interface Builder). You'll keep it hidden until you want to show it.

3) Add the following code to your ViewController.h, below the other @property lines:

@property (nonatomic, retain) IBOutlet UIWebView *webView;

4) Add the following line below the @synthesize in your ViewController.m

@synthesize webView;

And add [webView release]; in the dealloc method.

5) Go back into IB and click on File's Owner, and connect the webView outlet to the webView you created.

6) Add the following method instead of the method I showed above (for the programmatic example):

//This method should get called when you want to add and load the web view
- (void)loadUIWebView
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:currentURL]]];
    self.webView.hidden = NO; 

You could set up an IBAction method to respond to the button press, but it sounds like you already have the button press working, so I wouldn't bother with that now.

As far as adding a button above the web view, you can either subclass web view and add the button there, or just have a separate button you define in your nib or programmatically and have that hide the webView to "get rid of it".