Кнопки «Назад» и «Вперед» WKWebView не активируются, когда предполагается, что они могут переходить назад / назад. - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь реализовать опцию социальных сетей в приложении, где вы можете перейти прямо на страницу Twitter компании.

WKWebView работает нормально, но как только я смогу вернуться назад или вперед, нажимая кнопки, эти кнопки не активируются.

Есть ли код, который я не реализовал?

На всякий случай полезно посмотреть интерфейс. введите описание изображения здесь

class twViewController: UIViewController,WKNavigationDelegate {
var theUrl:URL? = nil
@IBOutlet weak var twWeb: WKWebView!
@IBOutlet weak var backButton: UIButton!
@IBOutlet weak var forwardButton: UIButton!


override func viewDidLoad() {
    super.viewDidLoad()
    twWeb.navigationDelegate = self
    theUrl = URL(string: "https://twitter.com/EsAsturiasTV")
    let myRequest = URLRequest(url: theUrl!)
    twWeb.load(myRequest)
}
@IBAction func back(_ sender: Any) {
    if (twWeb.canGoBack){
        twWeb.goBack()
    }
}
@IBAction func forward(_ sender: Any) {
    if (twWeb.canGoForward){
        twWeb.goForward
    }
}


func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    backButton.isEnabled = twWeb.canGoBack
    forwardButton.isEnabled = twWeb.canGoForward
}

Во время отладки я увидел, что вызывается функция webView, поэтому она предполагает включение кнопок, но это не так.

Что делает его еще более странным, так это то, что я реализовал точно такой же код для Facebook (просто изменив URL), и он отлично работает.

1 Ответ

0 голосов
/ 13 мая 2019

Статус кнопки «Назад» и «Вперед» в WkWebView также можно получить с помощью наблюдателей свойств.Пожалуйста, найдите соответствующий код ниже.Это в Obj-C.надеюсь, что вы можете преобразовать его в Swift.

- (void)addAllObservers
{
    [_wkWebView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:NULL];
    [_wkWebView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:NULL];
}

- (void)removeAllObservers
{
    [_wkWebView removeObserver:self forKeyPath:@"canGoBack"];
    [_wkWebView removeObserver:self forKeyPath:@"canGoForward"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    if ([keyPath isEqualToString:@"canGoBack"] && object == _wkWebView) {

        // handle property change: get the value of _wkWebView.canGoBack
    }
    else if ([keyPath isEqualToString:@"canGoForward"] && object == _wkWebView) {
        // handle property change: get the value of _wkWebView.canGoForward
    }
}

_wkWebview является экземпляром WkWebview.Вы можете добавить addAllObservers в место создания WkWebview.Таким образом, когда имеются наблюдатели свойств, при каждом изменении значения свойства "canGoBack" и "canGoForward" будет получен обратный вызов в методе "observeValueForKeyPath", где состояние кнопки может быть включено / отключено на основе текущегозначение.

Надеюсь, это поможет.

...