从 UIWebView 委托呈现 ViewController
Posted
技术标签:
【中文标题】从 UIWebView 委托呈现 ViewController【英文标题】:Presenting ViewController from UIWebView delegate 【发布时间】:2012-08-22 17:37:26 【问题描述】:我有一个UIWebView
和一个代表id<UIWebViewDelegate>
。当我点击 UIWebView 中的链接时,我在回调中得到 NSURLRequest
对象:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
我想做的是:
- (void)presentWebViewControllerWithUrl:(NSURL*)URL
SVModalWebViewController *webViewController = [[SVModalWebViewController alloc] initWithURL:URL];
webViewController.modalPresentationStyle = UIModalPresentationPageSheet;
webViewController.availableActions = SVWebViewControllerAvailableActionsOpenInSafari | SVWebViewControllerAvailableActionsCopyLink | SVWebViewControllerAvailableActionsMailLink;
[self presentModalViewController:webViewController animated:YES];
当我将此代码放在我的主视图控制器中时,会出现模式 Web 视图,但如果我将它放在我的委托中,它不会出现。如何让它出现?
更新:
从shouldStartLoadWithRequest
返回NO
只会让我的 UIWebViews 变成白色,没有内容。似乎在 webviews 加载时正在调用回调。我正在使用[web loadhtmlString:@"..." baseUrl: nil]
将本地存储的HTML
加载到它们中
模态永远不会出现。
我的视图层次如下:
-
主视图
UI 视图
UIScrollView
UIWeb 视图
UIWeb 视图
...
有没有办法让回调“冒泡”以便我可以在主视图控制器中看到事件?
【问题讨论】:
【参考方案1】:确保在覆盖您的 shouldStartLoadWithRequest 委托方法时返回 (NO)。
另外,我在您的代码中看不到 [viewController presentModalViewController:webViewController animated:YES],如下所示:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
if (navigationType != UIWebViewNavigationTypeLinkClicked)
return (YES);
SVModalWebViewController *webViewController = [[SVModalWebViewController alloc] initWithURL:[request URL]];
webViewController.modalPresentationStyle = UIModalPresentationPageSheet;
webViewController.availableActions = SVWebViewControllerAvailableActionsOpenInSafari | SVWebViewControllerAvailableActionsCopyLink | SVWebViewControllerAvailableActionsMailLink;
[myViewController presentModalViewController:webViewController animated:YES];
return(NO);
【讨论】:
这个方法对我不起作用。也许有一种方法可以将回调“冒泡”到我的主视图控制器? [self presentModalViewController...] 假定此委托方法位于 UIViewController 类中。在调试器中运行,看看发生了什么。我还编辑了代码,因为您应该检查 navigationType 嗨,我面临着完全相同的问题。我已经花了 2 天时间寻找解决方案,但它使我的应用程序崩溃。请帮帮我....以上是关于从 UIWebView 委托呈现 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 mapKit 从 ViewController 将坐标发送到具有委托的另一个 viewController