为 segue 控制器设置 webview 委托?
Posted
技术标签:
【中文标题】为 segue 控制器设置 webview 委托?【英文标题】:Setting a webview delegate for a segue controller? 【发布时间】:2013-01-16 22:21:37 【问题描述】:我有两个通过模态转接连接的视图控制器。目标控制器也有一个 UIWebView。
阅读文档我想选择第一个控制器来负责关闭 webview 控制器,我这样做的操作将在 webview 委托方法中。
我正在尝试这个:
第一个控制器:
@interface ABISignInViewController : UIViewController <UIWebViewDelegate>
...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
...
else if ([[segue identifier] isEqualToString:@"showWebViewForSignUp"])
ABIWebBrowserViewController *webViewController = (ABIWebBrowserViewController *)segue.destinationViewController;
[webViewController.webView setDelegate:self];
[webViewController setUrlString:@"https://myurl"];
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSLog(@"%@", request);
return YES;
第二个控制器启动并开始加载请求的 url:
- (void)viewDidAppear:(BOOL)animated
NSURL *url = [NSURL URLWithString:self.urlString];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
然而,第一个控制器中的委托方法永远不会被调用。 有什么路线吗?
【问题讨论】:
【参考方案1】:为什么不将 URL 作为 NSString 或 NSURL 传递,然后让带有 WebView 的 ViewController 处理委托方法?
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
...
else if ([[segue identifier] isEqualToString:@"showWebViewForSignUp"])
ABIWebBrowserViewController *webViewController = (ABIWebBrowserViewController *)segue.destinationViewController;
webViewController.urlString = @"https://myurl";
WebView 视图控制器:
- (void)viewDidAppear:(BOOL)animated
NSURL *url = [NSURL URLWithString:self.urlString];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSLog(@"%@", request);
return YES;
【讨论】:
因为我希望第一个控制器根据请求的 url 负责关闭模态 webview 控制器,因此控制器也是可重用的。请参阅此处:developer.apple.com/library/ios/#featuredarticles/…“关闭呈现的视图控制器” 然后您将使用协议和委托模式来执行此操作。看到这个答案:***.com/questions/8905961/…以上是关于为 segue 控制器设置 webview 委托?的主要内容,如果未能解决你的问题,请参考以下文章
webView.loadRequest 错误,如果使用 presentViewController,但如果使用 segue 则一切正常
iOS Modal Segue 丢弃源 ViewController?