2015-08-30 32 views
0

想象一下有一個帖子列表,如果你點擊一個postItem,那麼會顯示一個詳細的帖子視圖。例如,帶NavigationBar的UIWebView

/索引

[post1, post2, post3 ...]

POST1被點擊

/帖/ 1

Hello! I am a post!

另外,將被包括在網站插件ide UIWebView是一個單頁的網絡應用程序,這使事情有點棘手。由於web應用程序呈現部件而不是redirecting,因此導航不一定會發出另一個Web請求。對於爲每個導航提供新url請求的常規網站,我可以使用webViewDidStartLoadshouldStartLoadWithRequest,每個網頁都有一個ViewController。對於我的情況,一個天真的解決方案將使用window.location = url強制重新導向每個導航。

但是,這會失去渲染特定部件所帶來的性能提升。更好的方法是在用戶離開索引頁面時動態添加導航項,例如titleback button。問題是,如果我沒有進行完全重定向,如何檢測用戶是否從/ index移動到/ posts/1?

非常感謝你提前!

回答

0

對於最後一個綁定標題和返回按鈕的想法,您可以使用以下內容,但需要修改網站代碼。

您可以使用自定義協議/ url方案從webview與本地控制器進行通信。

想法是在需要更新時撥打電話window.location = 'myapp://thisismyaction/thisisanarg'

撥打電話後,您用-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType截取。

在這個方法中,你解析你的請求來檢測它是否以myapp開頭://並且你解析這行以獲得你的動作和你的參數。語法取決於你喜歡的常規查詢字符串或者在我的例子中。你根據你解析的內容做你的更新和標題,你返回NO來防止加載一個不存在的URL。

爲了讓這個調用只發生在webview而不是瀏覽器,你可以注入一些JavaScript對象,當你webview完成加載與stringByEvaluatingJavaScriptFromString方法從web視圖,並檢查對象是否定義之前進行調用的JavaScript。