0

我有一个需要打开 Web 视图的 UITableViewController。

在我的功能中,我有:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

                LinkViewController *linkViewController = [[LinkViewController alloc] initWithNibName:@"LinkViewController_iPhone" bundle:nil];

                [linkViewController.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];

                [self.navigationController pushViewController:linkViewController animated:YES];

}

我已连接所有插座,但没有收到任何警告,但我没有看到页面拉起。

但是,如果我进入实际的 LinkViewController 文件并执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];

        NSString *urlAddress = @"http://www.google.com";

    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlAddress];

    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    //Load the request in the UIWebView.
    [self.webView loadRequest:requestObj]; 
}

一切似乎都很好。我不明白为什么 ?

4

1 回答 1

2

您应该将URL属性添加到您的LinkViewController. 然后在您的表视图控制器中执行以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    LinkViewController *linkViewController = [[LinkViewController alloc] initWithNibName:@"LinkViewController_iPhone" bundle:nil];             
    linkViewController.URL = [NSURL URLWithString:@"http://www.google.com"];

    [self.navigationController pushViewController:linkViewController animated:YES];
}

现在在您的 LinkViewController 中,您可以:

- (void)viewDidLoad {
    [super viewDidLoad];

    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:self.URL];

    //Load the request in the UIWebView.
    [self.webView loadRequest:requestObj]; 
}

你原来的问题有两个:

  1. 在表视图控制器中,您在webView初始化之前访问了该属性。这就是为什么什么都没发生。
  2. LinkViewController您向外界暴露了太多的实现细节。如果您LinkViewController在应用程序的许多地方使用,则要求该类的每个用户都知道创建 URL、创建请求,然后告诉内部 Web 视图开始加载。所有这些逻辑都属于LinkViewController. 现在该类的每个用户只需要知道设置一个简单的 URL 属性。
于 2013-03-03T00:05:03.073 回答