的ViewController
webView
- 简单的UIWebView aboutButton
- 带您进入AboutViewController AboutViewController
websiteButton
- 已连接到clickWebsiteButton
clickWebsiteButton
- 关闭AboutViewController,在http://websiteURL.com/
中加载webView
(在ViewController中)AboutViewController代码
// AboutViewController.h
#import "ViewController.h"
@class ViewController;
@interface AboutViewController : UITableViewController <UIWebViewDelegate> {
ViewController *viewController;
}
// AboutViewController.m
-(IBAction)clickWebsiteButton:(id)sender {
[viewController.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://websiteURL.com/"]]];
[self dismissModalViewControllerAnimated:YES];
}
问题
我希望能够在通过IBAction解除视图时在UIWebView中加载http://websiteURL.com/
。截至目前,它只是关闭视图但不在WebView中加载URL。 WebView正在正常工作并正确加载URL,我只是在从不同的视图加载此URL时遇到麻烦。有什么想法吗?
由于
答案 0 :(得分:1)
我回答your other question有关持久数据存储的问题。这是让viewControllers分享数据的另一种方式,所以你可能不再需要这个,但以防万一......
问题是,在解除显示的viewController(aboutViewController)之前,您正在调用viewController上的方法。需要在解雇过程完成后调用它。
此方法:
dismissModalViewControllerAnimated:
在iOS6中已弃用,因为iOS5鼓励您使用此代替
dismissViewControllerAnimated:completion:
其中completion
采用块参数。放置在完成块中的代码将在解雇完成后执行。您可以在此处向呈现的viewController发送消息。
self.presentingViewController
是对viewController的引用,它提供了aboutViewController - 它由iOS提供,作为呈现过程的一部分。但是你不能在完成块中使用它,因为它在解雇过程中被取消,所以你需要先将它复制到局部变量。
在aboutViewController中......
-(IBAction)clickWebsiteButton:(id)sender
{
//to use self.presentingViewController in the completion block
//you must first copy it to a local variable
//as it is cleared by the dismissing process
UIViewController* presentingVC = self.presentingViewController;
[self.presentingViewController dismissViewControllerAnimated:YES
completion:
^{
if ([presentingVC respondsToSelector:@selector(loadRequestWithString:)]) {
[presentingVC performSelector:@selector(loadRequestWithString:)
withObject:@"http://websiteURL.com/"];
}
}];
}
在你的呈现viewController中,创建一个接受字符串参数的方法:
- (void) loadRequestWithString:(NSString*)webString
{
NSURL* requestURL = [NSURL URLWithString:webString];
[self.webView loadRequest:[NSURLRequest requestWithURL:requestURL]];
}
答案 1 :(得分:0)
一种选择是使用委托回调。使用当前代码,viewController即时为零。我有一个示例如何实现委托模式here。
答案 2 :(得分:-1)
请记住,如果您使用的是UINavigationController,则必须执行
UINavigationController *viewConNav = (UINavigationController *)self.presentingViewController;
YourVC *viewCon = (YourVC *)viewConNav.topViewController;