webviewを含んだviewControllerをNavigationControllerにpushした後、  
webview内での画面遷移がスタックされている場合、バックボタンはwebview内でバック、無くなれば元の画面にバックとしたいです
CC BY-SA 3.0
2015-03-05T02:55:41.050
7460
2015-03-05T07:17:45.190
525
question
ios uinavigationcontroller
UINavigationControllerでWebViewのバックをハンドルする事は出来ますか？
簡単な方法では、ボタンを非表示にし、自作する方法があります。

```

    - (void)viewDidLoad {
        [super viewDidLoad];
        webView = [[UIWebView alloc] initWithFrame:self.view.frame];
        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.co.jp/"]]];
        [self.view addSubview:webView];
        //非表示
        [self.navigationItem setHidesBackButton:YES animated:YES];
        UIBarButtonItem * back = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(didBackButtonTap:)];
        [self.navigationItem setLeftBarButtonItem:back];
    }
    
    -(void)didBackButtonTap:(UIBarButtonItem *)item
    {
        if (webView.canGoBack) {
            [webView goBack];
        }else{
            [self.navigationController popViewControllerAnimated:YES];
        }
    }
    
```

そのままで使うには、backボタンをフックする必要があります。  
方法は、本家に参考になる質問がありました。

[UINavigationController: How to cancel the back button
event?](https://stackoverflow.com/a/19133451)
CC BY-SA 3.0
2015-03-05T07:17:45.190
7472
2015-03-05T07:17:45.190
2017-05-23T12:38:56.083
-1
4551
7460
answer