UIViewControllers和UIWebView

时间:2009-08-30 09:34:18

标签: iphone iphone-sdk-3.0 uiwebview

我是iPhone开发的新手并且有一个问题,这可能最终有助于理解这个概念。

基本上,我有UIViewController,它用一堆东西加载一个视图。现在我想要当用户点击按钮,加载不同的视图时,恰好是webView。现在,我希望weview根据原始视图中按下的按钮加载不同的URL。

我该怎么做呢?基本上在我的脑海里,我想我可以在按下按钮时加载并交换视图,如下所示:

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

    NSString *selectedLink = [valuesForSection objectAtIndex:row];

    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.
    [webView loadRequest:requestObj];

    [self.view removeFromSuperview];
    [self.view insertSubview:webView atIndex:0];
}

这是正确的做法吗?或者我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

这就是我的方式,是的。创建单个UIWebView,并根据选择的单元格,使用loadRequest:将NSURLRequest加载到视图中。它的优点是不需要为每个单元构建单独的Web视图,也不需要异步。

但是,每当单击一个单元格时,我不一定会从其超级视图中删除self.view;相反,我会弹出一个模态视图控制器(presentModalViewController:animated:),其中Web视图作为其视图,或者我将一个新控制器推送到导航控制器堆栈(pushViewController:animated:)。这是一个更平滑的过渡,对用户来说会更好看。

编辑(以回应评论):是的,拥有另一个控制器比仅交换视图更好。执行removeFromSuperviewaddSubview:会使两个视图保持在同一个控制器中,但结果会使您的代码更难管理(一个控制器将处理两个视图)并且用户体验更差(没有转换,就像内置导航控制器推送一样。)

为了正确推送,你应该:

  • 为现有视图控制器构建导航控制器
  • 当您需要时,创建一个新的UIViewController实例,并将其视图设置为您创建的UIWebView并使用HTML加载
  • 通过调用:
  • 将新视图控制器从旧视图控制器推入导航控制器堆栈
[self.navigationController pushViewController:newViewController animated:YES];