在dismissViewControllerAnimated之后未加载视图

时间:2014-02-15 23:13:06

标签: ios uiview uiviewcontroller webview

我的firstViewController中有一个webView。 我让用户在另一个viewController(secondViewController)的url中更改一些参数。

我正在展示第二个视图控制器,让用户这样做。 当他完成时(他点击'完成'按钮并调用dismissViewControllerAnimated), 我想获取url-changes并将其加载到视图控制器webView。但似乎没有加载webView ....这就是问题。

这是一个例子。

firstViewController.h:

.......
#import "SecondViewController.h"
.....
@property (strong, nonatomic) IBOutlet UIWebView *webView;
.....

firstViewController.m:

@synthesize webView;

SecondViewController *csvc = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];
csvc.OLDurlInWebView = webView.request.URL.absoluteString;
csvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:csvc animated:YES completion:nil];
......
......
......
//I'm calling this method after dismissViewControllerAnimated from secondViewControllerClass
-(void)showInView:(NSString *)str {
    [self view];
    [self loadView];
    [self view];
    [self openURL:[NSURL URLWithString:str]];
    UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"TEST" delegate:nil cancelButtonTitle:@"TEST" destructiveButtonTitle:nil otherButtonTitles:@"TEST", nil];
    NSLog(@"current:%@ isLoaded:%d",webView.request.URL.absoluteString,self.isViewLoaded); //output 'current:(null) isLoaded:1'
    [sheet showInView:self.view];//this sheet test will not show, the app will crash:'Sheet can not be presented because the view is not in a window:.......'
}
-(void)openURL:(NSURL *)url {
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

    NSLog(@"Trying to open %@ in webbrowser", url);

    [webView loadRequest:request];

}

secondViewController.h:

.......
#import "FirstController.h"
.......
@interface SecondViewController : UIViewController {
NSString *OLDurlInWebView;
.......
}
.......
@property (strong, nonatomic) NSString *OLDurlInWebView;
- (IBAction)doneButton:(id)sender;
.......

secondViewController.m:

@synthesize OLDurlInWebView;

......
- (IBAction)doneButton:(id)sender {
    [self dismissViewControllerAnimated:NO/*YES*/ completion:nil]; //completion???
}
-(void)viewDidDisappear:(BOOL)animated {
    NSLog(@"SecondViewC didDisappear");
    WebViewController *wb = [self.storyboard instantiateViewControllerWithIdentifier:@"web"];

    NSString *newurl = @"http://facebook.com"; //let the user load facebook as example
    [wb view];
    [wb loadView]; //testing everything, nothing works
    [wb view];

    [wb performSelector:@selector(showInView:) withObject:newurl afterDelay:5];//the webView will not load after 5 seconds. Why?
}

好的,从一开始:

在firstViewController中:

我正在展示secondviewcontroller。

现在我们在secondViewController中:

用户现在将更改网址,但在此示例中,他会将网址更改为facebook.com。

现在我们要将这个新网址(facebook.com)发送回firstViewController。用户 单击doneButton并调用dismissViewControllerAnimated。

尝试使用此新网址(facebook)返回firstViewController。

我测试了我所知道的一切,这还不够。我已经测试过从secondViewController调用firstViewController中的普通函数。 webView将无法加载请求。

然后我测试将代码放在viewDidDisappear中并给视图加载5秒,但它不起作用。

我的应用程序在app delegate中处理URL Scheme Link时,我之前遇到过这个问题。 - (BOOL)应用程序:(UIApplication *)应用程序handleOpenURL:(NSURL *)url 例如,如果您不想使用URL方案链接中的URL或文本加载另一个webView /标签? 如何从app delegate执行此操作?这与上述问题相同。

我做错了什么/我不知道什么? 如何“等待”视图加载,然后能够加载例如带有URL的webView。?

1 个答案:

答案 0 :(得分:0)

必须在第一个VC上调用Dismiss。你可以从第二个开始这样做:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

此外,要获取信息,您可以在第一个视图中使用委托或属性:

在解雇之前打电话:

[self.presetingViewController setMyProperty:urlToPassBack];