【问题标题】:How do I detect that I'm on the initial webView page?如何检测到我在初始 webView 页面上?
【发布时间】:2020-02-10 13:51:19
【问题描述】:

我的应用中有一个webView,运行良好。为了使用户能够返回到以前的urllink,我在navigationBar 中有一个自定义的返回button。链接到 button 的是一个简单的代码行,可以将用户带回上一个屏幕:

-(void)webBackButton {
    NSLog(@"BACK BACK BACK");
    [_webView goBack];
}

效果很好。现在真正的问题是,在最初的webView 中显然不应该有后面的button(没有地方可以回去)。所以,我想在显示的第一个webView 上隐藏和禁用button。为此,我想我需要以某种方式检查当前的webView 不是最初的webView。像这样:

if(!_webView.URL.absoluteURL) {
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(webBackButton)];
}

而且我认为每次应该隐藏“webViewchange itsurlpath; that is when the user uses alink. If the currentwebViewis_webView.URL.absoluteURLthe backbutton”时都必须进行此检查,否则它应该是显示。

我该如何做到这一点。据我了解,delegate webViewDidFinishLoad 已被弃用。我尝试过使用observeValueForKeyPath,但是当我转到另一个url 时似乎没有触发。有没有更简单的方法可以在初始屏幕上隐藏背面button

【问题讨论】:

    标签: ios objective-c uiwebview webkit uinavigationbar


    【解决方案1】:

    UIWebview 类

    open var canGoBack: Bool { get }
    

    WKWebView 类

    /** @abstract A Boolean value indicating whether there is a back item in
     the back-forward list that can be navigated to.
     @discussion @link WKWebView @/link is key-value observing (KVO) compliant
     for this property.
     @seealso backForwardList.
     */
    open var canGoBack: Bool { get }
    

    添加对 webBackButton 方法的检查:

    if([self.webView canGoBack]) {
        [backBtn setEnabled:YES];
    } else {
        [backBtn setEnabled:NO];
    }
    

    抱歉混淆了 Swift 和 Objective C,伪代码保持不变。

    【讨论】:

    • 好的,很好,但是我应该把支票放在哪里?每次 webView url 更改时都必须触发它,这让我回到了委托/观察者部分。当导航改变时需要触发一些东西。
    • 我会添加一个检查 -(void)webBackButton{} 方法。
    • 感谢您的更新,但我不确定在实际单击按钮时启用/显示和禁用/隐藏按钮是否有意义。还是我误会你了? webBackButton 触发按钮点击。
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多