Different URI for each instance of UIViewController

ios, objective-c

Solution

Create a property of type `NSURL*` in your customVC.

Change your customVC's `-(id)init` method to `-(id)initWithURL:(NSURL*)url` as follows:

-(id)initWithURL:(NSURL*)url{
 self = [super init];
 if(self){ 
  self.<URLPropertyName> = url;
 }
 return self;
}

Then call

[start.webView loadRequest:[NSURLRequest requestWithURL:self.<URLPropertyName>]];

in `viewDidLoad`

Then when you initialize your different instances of customVC, just use

customVC *vc = [customVC alloc]initWithURL:[NSURL URLWithString:@"http://..."]];

Problem

I have a UITabController with five tabs. Each tab simply holds an instance of a custom UIViewController, and each instance holds a UIWebView. I want the UIWebView in each tab to open a different URI, but I don't think it should be necessary to create a new class for each tab. I can make it work if I do `[self.webView loadRequest:]` in `-(void)viewDidLoad` but it seems ridiculous to create five different classes with five different versions of viewDidLoad when all I really want to change is the URI. Here's what I've tried: appDelegate.h ``` #import <UIKit/UIKit.h> @interface elfAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) UITabBarController *tabBarController; @end ``` appDelegate.m ``` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; customVC *start = [[customVC alloc] init]; customVC *eshop = [[customVC alloc] init]; customVC *table = [[customVC alloc] init]; customVC *video = [[customVC alloc] init]; customVC *other = [[customVC alloc] init]; // Doesn't do anything... I wish it would! [start.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]]; self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.viewControllers = @[start, eshop, table, video, other]; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return YES; } ``` customVC.h ``` #import <UIKit/UIKit.h> @interface customVC : UIViewController <UIWebViewDelegate> { UIWebView* mWebView; } @property (nonatomic, retain) UIWebView* webView; - (void)updateAddress:(NSURLRequest*)request; - (void)loadAddress:(id)sender event:(UIEvent*)event; @end ``` customVC.m ``` @interface elfVC () @end @implementation elfVC @synthesize webView = mWebView; - (void)viewDidLoad { [super viewDidLoad]; self.webView = [[UIWebView alloc] init]; [self.webView setFrame:CGRectMake(0, 0, 320, 480)]; self.webView.delegate = self; self.webView.scalesPageToFit = YES; [self.view addSubview:self.webView]; } ```

Original source