WebKit(导航)

WebKit(展示Web界面)

WebKit(WKScriptMessageHandler)

WebKit(WKUIDelegate)

WebKit(WKNavigationDelegate)

WebKit(刷新)

WebKit(导航)

WebKit(浏览记录)

WebKit(进度条)


在上一篇博文《WebKit(刷新)》讲解了刷新网页。接下来讲解网页前进和后退功能。

1 WekWebView导航相关

在WekWebView中有管理页面前进后后退的属性和方法。

// 能否回到上一页
@property (nonatomic, readonly) BOOL canGoBack;

// 回调上一页
- (nullable WKNavigation *)goBack;

// 能否去往下一页
@property (nonatomic, readonly) BOOL canGoForward;

// 跳转到下一页
- (nullable WKNavigation *)goForward;

2 实现导航

2.1 强引用导航按钮

我们还是在UINavigationController添加相关按钮。

考虑到没有上一页和下一页时,给用户更好的视觉感受,导航按钮不可点。因此我们添加强引用的导航按钮。

@property (nonatomic, strong) UIBarButtonItem *goBackBarButtonItem;    ///< 上一页按钮
@property (nonatomic, strong) UIBarButtonItem *goForwardBarButtonItem; ///< 下一页按钮

2.2 创建导航按钮

改造initUIBarButtonItem()方法。

#pragma mark 初始化UIBar导航按钮
- (void)initUIBarButtonItem {
    // 左边
    self.goBackBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(goBack:)];
    self.goBackBarButtonItem.enabled = NO; // 不可点
    self.goForwardBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(goForward:)];
    self.goForwardBarButtonItem.enabled = NO;
    self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:self.goBackBarButtonItem, self.goForwardBarButtonItem, nil];
    // 右边
    UIBarButtonItem *reloadItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reload:)];
    self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:reloadItem, nil];
}

2.3 实现导航方法

在导航的时候,为了安全,我们先判断一下能否跳转,再执行跳转操作。

#pragma mark 上一页
- (void)goBack:(id)sender {
    if ([self.webView canGoBack]) {
        [self.webView goBack];
    }
}

#pragma mark 下一页
- (void)goForward:(id)sender {
    if ([self.webView canGoForward]) {
        [self.webView goForward];
    }
}

2.4 导航按钮能否点击

为了给用户更好的感觉,我们应该让用户直观的感觉到按钮能否点击。

改写WKNavigationDelegate协议的- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation方法。

#pragma mark 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
    NSLog(@"%s",__FUNCTION__);
    if (!self.webView.loading) {
        self.navigationItem.title = webView.title; // 页面标题
        // 上一页按钮和下一页按钮是否可点
        self.goBackBarButtonItem.enabled = [self.webView canGoBack];
        self.goForwardBarButtonItem.enabled = [self.webView canGoForward];
    }
}

在这里当页面加载完成时,还同时将网页的标题设为navigationItem.title。

运行项目即可测试导航效果。
 


其他

源代码

Objective-C

参考资料

WebKit Framework Reference

文档修改记录

时间描述
2015-12-02博文完成
2015-12-12更改链接

版权所有

CSDN:http://blog.csdn.net/y550918116j

GitHub:https://github.com/937447974/Blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值