2011-08-09 55 views
4

我在基於導航的應用程序的UIwebview中顯示了一些文本和圖像。它還包含一些鏈接,指向數據的來源,即網站。它以完美的方式展現出來。但是當用戶點擊後退按鈕時,它會彈出前一個視圖控制器並前往它。但是,當用戶點擊鏈接後,必須將後退按鈕轉換爲瀏覽器的後退按鈕,並按照其操作。如何將navigationcontroller的後退按鈕轉換爲iPhone中的瀏覽器後退按鈕?

任何建議/示例代碼或教程?

,你所要做的

回答

17

您可以更換帶有瀏覽器後退按鈕的導航欄的後退按鈕,只要UIWebView可以通過執行如下操作來返回:

- (void)updateBackButton { 
    if ([self.webView canGoBack]) { 
     if (!self.navigationItem.leftBarButtonItem) { 
      [self.navigationItem setHidesBackButton:YES animated:YES]; 
      UIBarButtonItem *backItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backWasClicked:)] autorelease]; 
      [self.navigationItem setLeftBarButtonItem:backItem animated:YES]; 
     } 
    } 
    else { 
     [self.navigationItem setLeftBarButtonItem:nil animated:YES]; 
     [self.navigationItem setHidesBackButton:NO animated:YES]; 
    } 
} 

- (void)webViewDidStartLoad:(UIWebView *)webView { 
    [self updateBackButton]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [self updateBackButton]; 
} 

- (void)backWasClicked:(id)sender { 
    if ([self.webView canGoBack]) { 
     [self.webView goBack]; 
    } 
} 
2

首先看到的是,你要隱藏的默認後退按鈕,下面

如下

self.navigationItem.hidesBackButton = YES;

這一點,你必須添加自定義後退按鈕上的導航欄,如下之後:

的UIButton * m_BackBtn = [UIButton的buttonWithType:UIButtonTypeCustom]。

m_BackBtn.frame = CGRectMake(4.0,5.0 + 0.0,100,30);

[m_BackBtn setTitle:@「Back」forState:UIControlStateNormal];

[m_BackBtn addTarget:selfaction:@selector(BackButtonAction)forControlEvents:UIControlEventTouchUpInside];

[m_BackBtn retain]; 

[self.navigationController.navigationBar addSubview:m_BackBtn];

* 而在BackButtonAction功能*

- (無效)BackButtonAction
{

[yourwebView goBack]; 

//隨你需要你的東西

}

+0

我希望這會幫助你,如果這上面的代碼幫您務必請投我 – sumanthkodi

+0

但是在我的設計,我需要把默認的後退按鈕導航控制器的 怎麼把我需要表現出以前的viewconrtoller名在後面的時候,它在視圖控制器中 –

0

帶一個UIBarbuttonItem f在返回按鈕的地方ROM XIB你 可以寫在其IBAction爲方法如下假設你的UIWebView 對象是

UIWebView *web; 

-(IBAction)goBack 
{ 
     [web goBack]; 
} 

GoBack的是一個UIWebView

的內置方法
0

我喜歡上面的@ cduhn的方法,因爲它很簡單,但是它具有在Back按鈕上丟失「<」的缺點。如果你想保持「真正的」後退按鈕(與它的「<」圖標)看到這個答案,但改變按鈕的行爲:

https://stackoverflow.com/a/19132881/132542

對於Web視圖歷史情況下在這裏,這是代碼我用我的委託方法:

-(BOOL) navigationShouldPopOnBackButton { 
    if (webView.canGoBack) { 
     // Then just go back in the web view 
     [webView goBack]; 
     // return NO to keep the current view controller loaded 
     return NO; 
    } 
    else { 
     // no web history, so pop the view 
     return YES; 
    } 
} 
0

這是一個有點棘手的解決方案,可能不會被建議。但這樣你可以在導航欄上保留後退導航動畫。

var urlRequest: NSURLRequest? 
//////// 
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if navigationType == .LinkClicked { 
     //AViewController creates and pushes itself to the navigationController 
     let pushViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AViewController") as! AViewController 
     pushViewController.urlRequest = request 
     self.navigationController?.pushViewController(pushViewController, animated: true) 
     return false 
    } else { //is initial request from push 
     return true 
    } 
}