一、需求说明
  • 在iOS开发中,不免有原生与H5的交互,比如说:从原生页面的一个按钮,点击之后跳转到了一个H5的页面A,A页面中又有一个按钮,点击之后,又加载了一个新的H5页面B,从B点击一个按钮,又加载一个新的H5页面C,如果此时我们点击左上角的返回按钮,会直接返回到我们的原生页面。这样的话,用户的体验很不好,我们需要对WebView进行添加按钮事件的处理。
  • 此时,想要重新定制返回按钮,想要从C页面判断是否还有上一级H5页面可供返回,如果有上一级页面还是H5,点击左上角的返回则返回到B页面,并且在B页面的左上角加上一个关闭按钮,这个关闭按钮的作用主要是为了关闭所有的H5的页面,直接返回到原生的页面;如果不点击关闭按钮,还是点击返回,则从B页面返回到A页面;再次点击返回,则关闭了H5的页面,回到了原生的页面。
二、实现
  • 首先是初始化一个WebView:
@property (nonatomic,strong,readwrite) UIWebView *announceWebView;- (UIWebView *)announceWebView {if (!_announceWebView) {_announceWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, deviceScreenWidth, deviceScreenHeight)];_announceWebView.backgroundColor = MAIN_VIEW_COLOR;_announceWebView.scalesPageToFit = YES;_announceWebView.allowsInlineMediaPlayback = YES;_announceWebView.mediaPlaybackRequiresUserAction = YES;[self.view addSubview:self.announceWebView];}return _announceWebView;
}
  • 其次,在导航栏的左边添加一个自定义返回按钮和关闭按钮:
@property (nonatomic,strong,readwrite) UIBarButtonItem *returnButton;
@property (nonatomic,strong,readwrite) UIBarButtonItem *closeItem;- (UIBarButtonItem *)returnButton {if (!_returnButton) {_returnButton = [[UIBarButtonItem alloc] init];UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];UIImage *image = [UIImage imageNamed:@"fanhui.png"];[button setImage:image forState:UIControlStateNormal];//这是一张“<”的图片[button setTitle:@" 返回" forState:UIControlStateNormal];[button addTarget:self action:@selector(respondsToReturnToBack:) forControlEvents:UIControlEventTouchUpInside];[button.titleLabel setFont:[UIFont systemFontOfSize:17]];[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[button sizeToFit];button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;button.contentEdgeInsets = UIEdgeInsetsMake(0, -15, 0, 0);button.frame = CGRectMake(20, 0, 40, 40);_returnButton.customView = button;self.navigationItem.leftBarButtonItem = _returnButton;}return _returnButton;
}- (UIBarButtonItem *)closeItem {if (!_closeItem) {_closeItem = [[UIBarButtonItem alloc] initWithTitle:@"关闭" style:UIBarButtonItemStyleDone target:self action:@selector(respondsToReturnToFind:)];}return _closeItem;
}
  • 两个按钮的点击事件处理
 - (void)respondsToReturnToBack:(UIButton *)sender {// 判断当前的H5页面是否可以返回if ([self.announceWebView canGoBack]) {// 如果可以返回,则返回到上一个H5页面,并在左上角添加一个关闭按钮[self.announceWebView goBack];self.navigationItem.leftBarButtonItems = @[self.returnButton, self.closeItem];} else {// 如果不可以返回,则直接:[self.navigationController popViewControllerAnimated:YES];}
}- (void)respondsToReturnToFind:(UIBarButtonItem *)sender {[self.navigationController popViewControllerAnimated:YES];
}
  • 最后再用[self.announceWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:API_URL_ANNOUNCEMENT]]]加载出WebView界面内容以及实现相关的代理即可。

iOS之给WebView导航栏添加“返回”与“关闭”按钮相关推荐

  1. iOS 解决导航栏pop返回时出现黑块问题!

    iOS 解决导航栏pop返回时出现黑块问题! 问题描述: 导航栏正常从A页面push到B页面,从B页面pop返回A页面时遇到过渡过程中导航栏出现黑块的问题. 如截图所示: 问题原因: A界面导航栏被影 ...

  2. 定制iOS 7中的导航栏和状态栏

    近期,跟大多数开发者一样,我也正忙于对程序进行升级以适配iOS 7.最新的iOS 7外观上有大量的改动.从开发者的角度来看,导航栏和状态栏就发生了明显的变化.状态栏现在是半透明的了,这也就意味着导航栏 ...

  3. ios 系统状态栏样式修改_超简单!!! iOS设置状态栏、导航栏按钮、标题、颜色、透明度,偏移等...

    原标题:超简单!!! iOS设置状态栏.导航栏按钮.标题.颜色.透明度,偏移等 1. 要实现以下这些效果都非常简单 2. 废话不多说,先看看实现效果 3. 下面告诉你我为什么说实现这些效果非常简单 比 ...

  4. android 9.0 SystemUI导航栏添加虚拟按键功能(三)

    1.概述 在9.0的系统产品开发中,对于在SystemUI的原生系统中默认只有三键导航,想添加其他虚拟按键就需要先在构建导航栏的相关布局 中分析结构,然后添加相关的图标xml就可以了,然后添加对应的点 ...

  5. RK 7.1 导航栏添加隐藏虚拟按键的开关 并向上滑动显示虚拟按键

    主要是在导航栏添加一个按钮,点击按钮隐藏虚拟按键,然后在底部向上滑动能够掉出虚拟按键 主要是按照这位大神参考的:https://blog.csdn.net/cuckoochun/article/det ...

  6. Android 9 导航栏添加截图按钮

    Android 9 导航栏添加截图按钮 功能:Android 系统底部导航栏(HOME\BACK)位置添加截图按钮,系统设置界面添加截图开关 主要修改工程有SystemUI 和 Settings 注意 ...

  7. html页面导航图标添加,vue 切换网页导航栏添加logo及标题

    index.html 网页导航栏添加logo及标题 var scene = window.location.host if (scene === 'anfang.cn') { document.que ...

  8. android 9.0 SystemUI导航栏添加虚拟按键功能(一)

    目录 1.概述 2.SystemUI导航栏添加虚拟按键功能(一)的核心类

  9. android 11.0 SystemUI导航栏 添加虚拟按键(一)

    1.概述 在11.0产品定制化中,SystemUI的相关功能需求需要为导航栏添加虚拟按键来实现某些功能,比如添加wifi,可以通过点击wifi跳转到wifi页面,日期可以弹出当前万年历功能,所以需要对 ...

最新文章

  1. Confluence5.1 最新版的安装破解汉化
  2. 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗...
  3. 一次“ora-12170 tns 连接超时”的经历
  4. Android应用程序组件Content Provider的启动过程源代码分析(6)
  5. 算法积累之算法时间复杂度
  6. 用友ERP服务器的连接
  7. c语言队列(顺序队列,循环队列,链式队列)
  8. cdr 表格自动填充文字_「Excel技巧」Excel也可以实现自动填充26英文字母编号
  9. Python学习14 模块和包
  10. 7 centos 时钟跟物理机同步_centos7上使用chrony自动同步时间
  11. python tqdm自定义更新进度条
  12. Tensorflow——add_layer(添加神经层)
  13. ojective-C学习笔记(7)Foundation框架
  14. CentOs6.5安装使用数据恢复软件extundelete
  15. Oracle单实例开机自启动
  16. 安卓学习日志 Day15 — 数据库基础
  17. MT7621搭载openwrt实现U盘等设备自动挂载
  18. 【转】让ubuntu自带词典可以本地查…
  19. IoTDB Can not establish connection
  20. 大国崛起(四)————英国

热门文章

  1. 一款基于jquery带百分比的响应式进度加载条
  2. Cocos2dx 中 倒计时保留2位数写法
  3. 【转】托管函数的挂钩(完美版)
  4. 【转】经济计量学软件包Eviews快速使用
  5. [小才能]防备误删文件
  6. 每列大于0的个数_题目1342——把一个数字减少到0的步骤数
  7. java atomicinteger_Java多线程进阶(十三)—— J.U.C之atomic框架:AtomicInteger
  8. 虚拟机无法访问主机mysql_虚拟机linux端mysql数据库无法远程访问的解决办法
  9. int*类型和int类型_mysql8.0.19中在navicat客户端中int、bigint等类型设置长度保存后为0...
  10. 上海教师中级职称英语计算机考试,计算机教师如果考过了软考中级对职称评定有用吗,学校会承认嘛,有人懂吗,求助...