gpt4 book ai didi

ios - 带导航栏的 UIWebView

转载 作者:行者123 更新时间:2023-11-30 14:06:47 24 4
gpt4 key购买 nike

假设有一个帖子列表,如果您单击一个帖子项,则会显示详细的帖 subview 。例如,

/索引

[post1, post2, post3 ...]

post1 被点击

/posts/1

您好!我是一个帖子!

此外,将包含在 UIWebView 中的网站是一个单页 Web 应用程序,这让事情变得有点棘手。由于网络应用渲染部件而不是重定向,因此导航不一定会发出另一个网络请求。对于每次导航都会发出新 URL 请求的常规网站,我可以使用 webViewDidStartLoadshouldStartLoadWithRequest,每个网页有一个 ViewController。对于我的情况,一个简单的解决方案是使用 window.location = url 强制对每个导航进行新的重定向。

但是,这会失去渲染特定部分带来的性能提升。更好的方法是当用户离开索引页面时动态附加一个 navigationItem,例如 titleback 按钮。问题是,如果我没有进行完全重定向,如何检测用户是否从/index 移动到/posts/1?

提前非常感谢您!

最佳答案

对于绑定(bind)标题和后退按钮的最后一个想法,您可以使用以下内容,但您需要修改网站代码。

您可以使用自定义协议(protocol)/网址方案从 Web View 与 native Controller 进行通信。

这个想法是在需要更新时进行类似 window.location = 'myapp://thisismyaction/thisisanarg' 的调用。

调用完成后,您可以使用 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 拦截它。

在此方法中,您解析请求以检测它是否以 myapp://开头,并解析该行以获取操作和参数。语法取决于您,例如常规的 queryString 或如我的示例中所示。您根据解析的内容进行更新和标题,并返回 NO 以防止加载不存在的 URL。

为了确保此调用仅发生在 webview 而不是浏览器中,您可以在 webview 完成加载时注入(inject)一些 javascript 对象,并使用 webview 中的 stringByEvaluatingJavaScriptFromString 方法,并检查该对象是否是在从 javascript 进行调用之前定义。

关于ios - 带导航栏的 UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com