如何在不离开应用程序的情况下使用didSelectRowAtIndexPath加载网页?

时间:2011-04-20 22:22:30

标签: iphone uitableview sdk safari webpage

我正在解析RSS提要并将结果加载到表中。当用户点击故事时,他们将被带到网页。

目前我正在使用:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:story]];

麻烦的是,这会启动Safari并关闭我的应用程序。

有没有办法在我的应用中打开网页呢?我希望网页显示“完成”按钮,关闭网页并将用户返回到桌面。

非常感谢任何帮助(和代码示例)。

1 个答案:

答案 0 :(得分:3)

您可以在通过navigationController pushViewController选择器启动的新视图控制器中使用UIWebView,并在“Safari中查看”工具栏项目,该工具栏将启动完整的Safari浏览器(并将您的应用程序置于后台/终止)。

一些示例代码段:

假设: (1)您有一个视图控制器,名为:WebViewController(具有相同的.xib)文件。 (2)该视图控制器有一个UIView,它是主视图的子视图;

@interface WebViewController: UIViewController <UIWebViewDelegate> {
    UIWebView *webview;
    NSString *someUrlToLoad;
}

@property (nonatomic, retain) IBOutlet UIWebView *webview;
@property (nonatomic, copy) NSString *someUrlToLoad;

在此视图控制器的viewDidLoad方法中:

-(void) viewDidLoad {
    [super viewDidLoad];
    [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.someUrlToLoad]]];
}

当有人点击你的桌面视图中的单元格时加载此控制器:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    WebViewController *viewController = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:nil];
    viewController.someUrlToLoad = <url for this cell>;
    [self.navigationController pushViewController:viewController animated:YES];
    [viewController release];

}

您很可能希望在UIWebViewDelegate中包含一些钩子,以便在导航栏中停止/显示活动指示器,以便用户知道页面加载时发生了某些事情。