【问题标题】:UIViewControllers and UIWebViewUIViewControllers 和 UIWebView
【发布时间】:2009-08-30 09:34:18
【问题描述】:

我是 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];
}

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

【问题讨论】:

    标签: iphone iphone-sdk-3.0 uiwebview


    【解决方案1】:

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

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

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

    为了正确进行推送,您应该:

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

    【讨论】:

    • 你能告诉我你将如何实现pushviewcontroller吗?但是话虽如此,您是说拥有另一个控制器而不是仅包含一个视图会更好?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多