5

我有一个带有五个选项卡的 UITabController。每个选项卡只包含一个自定义 UIViewController 的实例,每个实例都包含一个 UIWebView。

我希望每个选项卡中的 UIWebView 打开不同的 URI,但我认为没有必要为每个选项卡创建一个新类。

如果我这样做,我可以让它工作[self.webView loadRequest:]-(void)viewDidLoad但是当我真正想要改变的只是 URI 时,用五个不同版本的 viewDidLoad 创建五个不同的类似乎很荒谬。

这是我尝试过的:

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;
}

自定义VC.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

自定义VC.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];

}
4

2 回答 2

4

NSURL*在您的 customVC 中创建一个类型的属性。

将您的 customVC 的-(id)init方法更改-(id)initWithURL:(NSURL*)url为如下:

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

然后打电话

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

viewDidLoad

然后,当您初始化不同的 customVC 实例时,只需使用

customVC *vc = [customVC alloc]initWithURL:[NSURL URLWithString:@"http://..."]];
于 2013-03-20T13:53:45.670 回答
1

loadRequest:我怀疑您在调用它的方法后正在初始化您的 webview 。为了避免这种情况,最好通过覆盖它们的设置器来初始化非原子属性:

- (UIWebView*)webview {
    if (mWebView == nil) {
        // do the initialization here
    }
    return mWebView;
}

这样,您的 webview 将在您第一次访问它时(在调用 时loadRequest:)被初始化,而不是在它之后,在您的自定义视图控制器的viewDidLoad方法中。

于 2013-03-20T14:09:07.480 回答