BlackHatSamurai
BlackHatSamurai

Reputation: 23503

Load different URL's in Web View

I have an app where I would like to push a button and have the user taken to a web view. However, I would like a particular page to load depending on the button that's pushed. Originally I thought about creating a separate web view for each button, but that only caused more issues, which I won't go into. So my question is: How can I load different URL's into a web view, based on whether a particular button is pushed?

I thought about using the prepareForSegue method, but thought that might be over complicating things. Any direction would be great.

Upvotes: 0

Views: 968

Answers (4)

Rahul Vyas
Rahul Vyas

Reputation: 28740

Here is the code for .h and .m File

Create a XIB and Put UIWebView on it and bind it to the class.

For Header File

#import <UIKit/UIKit.h>

@interface NewWebViewController : UIViewController<UIWebViewDelegate> {
    IBOutlet UIWebView *webView;
    NSString *currentURL;
    UIActivityIndicatorView *activityView;

}
@property (nonatomic, copy) NSString *currentURL;
@property (nonatomic, retain) UIActivityIndicatorView *activityView;

@end

For Implementation File (.m)

#import "NewWebViewController.h"

@interface NewWebViewController ()

@end

@implementation NewWebViewController
@synthesize currentURL;
@synthesize activityView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    webView.frame = self.view.frame;
    [webView setScalesPageToFit:YES];
    NSURL *url = [NSURL URLWithString:self.currentURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [webView loadRequest:requestObj];


    self.activityView = [[[UIActivityIndicatorView alloc] init] autorelease];
    self.activityView.tag = 1;
    self.activityView.hidesWhenStopped = YES;
    UIView *customView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)] autorelease];
    self.activityView.center = customView.center;
    [customView addSubview:self.activityView];
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:customView] autorelease];
    [self.activityView startAnimating];
}

#pragma mark UIWebView Delegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
    [self.activityView startAnimating];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self.activityView stopAnimating];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"Error %@",[error description]);
    [self.activityView stopAnimating];
}

- (void)viewDidUnload
{

    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [webView stopLoading];
    webView.delegate = nil;
    webView = nil;
    self.activityView = nil;
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    webView.frame = self.view.frame;
    return YES;//(interfaceOrientation == UIInterfaceOrientationPortrait);
} 

- (void) dealloc {
    [currentURL release];
    [webView release];
    [super dealloc];
}

@end

Here how to use this

- (void) openWebViewControllerWithURL:(NSString*) url {
    if (!url) {
        return;
    }
    NewWebViewController *vController = [[NewWebViewController alloc] initWithNibName:@"NewWebViewController" bundle:nil];
    vController.currentURL = url;
    [self.navigationController pushViewController:vController animated:YES];
    [vController release];   
}

On click of button just pass the URL you want to load

like this

 [self openWebViewControllerWithURL:@"http://www.google.com"];

Upvotes: 1

Caleb
Caleb

Reputation: 125017

How can I load different URL's into a web view, based on whether a particular button is pushed?

There are two basic approaches to recognizing different buttons:

  • separate actions: You can create a separate action method for each button, and then just hook up each button to the corresponding action.

  • single action: You can create a single action for all the buttons, and use some property of the buttons to differentiate between them.

The first one looks like this:

- (IBAction)button1Action:(UIButton*)sender
{
    [self.webView loadRequest:[NSURLRequest requestWithURL:url1]];
}

- (IBAction)button2Action:(UIButton*)sender
{
    [self.webView loadRequest:[NSURLRequest requestWithURL:url2]];
}

The second looks like:

- (IBAction)buttonsAction:(UIButton*)sender
{
    switch (sender.tag) {
        case button1Tag:
            [self.webView loadRequest:[NSURLRequest requestWithURL:url1]];
            break;
        case button2Tag:
            [self.webView loadRequest:[NSURLRequest requestWithURL:url2]];
            break;
    }
}

Upvotes: 1

crz
crz

Reputation: 458

so you must create new viewController with UIWebView inside it. On newViewController create a NSString property named url or somethings like that

example:

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

On buttonTouchUpInside event in oldViewController

UIStoryboard *mainStorybroad = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    newViewController *webViewController = [mainStorybroad instantiateViewControllerWithIdentifier:@"webviewIdentifier"];
webViewController.url = @"url string";

and final, in newViewController you just do:

[self.webView loadRequest:[NSURLRequest requestWithURL:url]];

Upvotes: 4

Henry F
Henry F

Reputation: 4980

Why don't you link the button in IB to just do a modal transition to the view controller page? Then, in the viewdidload on the new view controller, the code should look something like this:

    NSString *fullURL = @"google.com";
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_webView loadRequest:requestObj];

How many buttons do you have? If it's just a couple, then I would just create an extra couple view controllers. If it's a bunch, you could always create a global variable (I can already hear the cringing...) and set the variable equal to the desired URL depending on which button was pushed.

Upvotes: 1

Related Questions