У меня есть UITabController с пятью вкладками. Каждая вкладка просто содержит экземпляр пользовательского UIViewController, и каждый экземпляр содержит UIWebView.Различные URI для каждого экземпляра UIViewController
Я хочу, чтобы UIWebView на каждой вкладке открывал другой URI, но я не думаю, что это должно быть необходимо для создания нового класса для каждой вкладки.
Я могу заставить его работать, если я делаю [self.webView loadRequest:]
в -(void)viewDidLoad
, но кажется смешным создавать пять разных классов с пятью различными версиями viewDidLoad, когда все, что я действительно хочу изменить, это URI.
Вот что я пробовал:
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];
}
Выглядит многообещающе, но я должен где-то смущаться. В _customVC.h_ я добавил '@property (nonatomic, сохранить) NSURL * initURL;'. В _customVC.m_ я добавил '@synthesize initURL;' и '- (id) initWithURL: (NSURL *) url { [self setInitURL: url]; return self; } '. Я получаю сообщение об ошибке «Методы Init должны возвращать тип, относящийся к типу приемника». Что я должен возвращать? –
См. Отредактированный ответ. – Petar
Я все еще получаю ту же ошибку. Я должен упомянуть, что ошибка является _ARC Semantic Issue_. Я неправильно создаю свою собственность? Если это не '@property (неатомный, сохранить) NSURL * initURL;'? –