我的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。?
答案 0 :(得分:0)
必须在第一个VC上调用Dismiss。你可以从第二个开始这样做:
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
此外,要获取信息,您可以在第一个视图中使用委托或属性:
在解雇之前打电话:
[self.presetingViewController setMyProperty:urlToPassBack];