Кнопка назад WebKit не реагирует при нажатии - PullRequest
0 голосов
/ 22 октября 2018

У меня есть простая кнопка «Назад», чтобы вернуть пользователя после посещения веб-страницы.Проверяя это, кажется, что кнопка «назад» ничего не делает:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let stories = storyData[indexPath.row]
        guard let storyImageUrl = URL(string: stories.url) else {return}
        webView.load(URLRequest(url: storyImageUrl))
        webView.allowsBackForwardNavigationGestures = true
        view = webView

        // Back button
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.goBack))
    }

@objc func goBack() {
        if webView.canGoBack {
            webView.goBack()
        } else {
            self.navigationController?.popViewController(animated: true)
    }
}

Нажатие кнопки просто ничего не делает - я проверял различные подобные вопросы, и код выглядит правильно.Что здесь не так?

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете выдвинуть новый контроллер несколькими способами, например, используя segue или создавая экземпляр контроллера из раскадровки.

Я кратко расскажу о последнем.Создайте ViewController с webView в вашей раскадровке и присвойте ему идентификатор раскадровки как WebViewController.Создайте подкласс UIViewController с именем WebViewController и свяжите его с раскадровкой.Затем используйте приведенный ниже код, чтобы нажать его.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let stories = storyData[indexPath.row]
        guard let storyImageUrl = URL(string: stories.url) else {return}
        let webController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
        webController.urlToLoad = storyImageUrl
        self.navigationController?.pushViewController(webController, animated: true)           
}

В приведенном выше примере предполагается, что ваш текущий контроллер View встроен в UINavigationViewController.Затем в вашем представлении WebViewController viewDidLoad вы можете настроить кнопку возврата

var urlToLoad: String?
override func viewDidLoad() {
       // do your stuff
       // Back button
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.goBack))
         guard let storyImageUrl = URL(string: urlToLoad) else {return}
    webView.load(URLRequest(url: storyImageUrl))

}
@objc func goBack() {
        if webView.canGoBack {
            webView.goBack()
        } else {
            self.navigationController?.popViewController(animated: true)
        }
}

Вы также можете использовать segue.Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...