我是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];
}
这是正确的做法吗?或者我该怎么做呢?
答案 0 :(得分:1)
这就是我的方式,是的。创建单个UIWebView,并根据选择的单元格,使用loadRequest:
将NSURLRequest加载到视图中。它的优点是不需要为每个单元构建单独的Web视图,也不需要异步。
但是,每当单击一个单元格时,我不一定会从其超级视图中删除self.view
;相反,我会弹出一个模态视图控制器(presentModalViewController:animated:
),其中Web视图作为其视图,或者我将一个新控制器推送到导航控制器堆栈(pushViewController:animated:
)。这是一个更平滑的过渡,对用户来说会更好看。
编辑(以回应评论):是的,拥有另一个控制器比仅交换视图更好。执行removeFromSuperview
和addSubview:
会使两个视图保持在同一个控制器中,但结果会使您的代码更难管理(一个控制器将处理两个视图)并且用户体验更差(没有转换,就像内置导航控制器推送一样。)
为了正确推送,你应该:
[self.navigationController pushViewController:newViewController animated:YES];