iOS之给WebView导航栏添加“返回”与“关闭”按钮
一、需求说明
- 在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导航栏添加“返回”与“关闭”按钮相关推荐
- iOS 解决导航栏pop返回时出现黑块问题!
iOS 解决导航栏pop返回时出现黑块问题! 问题描述: 导航栏正常从A页面push到B页面,从B页面pop返回A页面时遇到过渡过程中导航栏出现黑块的问题. 如截图所示: 问题原因: A界面导航栏被影 ...
- 定制iOS 7中的导航栏和状态栏
近期,跟大多数开发者一样,我也正忙于对程序进行升级以适配iOS 7.最新的iOS 7外观上有大量的改动.从开发者的角度来看,导航栏和状态栏就发生了明显的变化.状态栏现在是半透明的了,这也就意味着导航栏 ...
- ios 系统状态栏样式修改_超简单!!! iOS设置状态栏、导航栏按钮、标题、颜色、透明度,偏移等...
原标题:超简单!!! iOS设置状态栏.导航栏按钮.标题.颜色.透明度,偏移等 1. 要实现以下这些效果都非常简单 2. 废话不多说,先看看实现效果 3. 下面告诉你我为什么说实现这些效果非常简单 比 ...
- android 9.0 SystemUI导航栏添加虚拟按键功能(三)
1.概述 在9.0的系统产品开发中,对于在SystemUI的原生系统中默认只有三键导航,想添加其他虚拟按键就需要先在构建导航栏的相关布局 中分析结构,然后添加相关的图标xml就可以了,然后添加对应的点 ...
- RK 7.1 导航栏添加隐藏虚拟按键的开关 并向上滑动显示虚拟按键
主要是在导航栏添加一个按钮,点击按钮隐藏虚拟按键,然后在底部向上滑动能够掉出虚拟按键 主要是按照这位大神参考的:https://blog.csdn.net/cuckoochun/article/det ...
- Android 9 导航栏添加截图按钮
Android 9 导航栏添加截图按钮 功能:Android 系统底部导航栏(HOME\BACK)位置添加截图按钮,系统设置界面添加截图开关 主要修改工程有SystemUI 和 Settings 注意 ...
- html页面导航图标添加,vue 切换网页导航栏添加logo及标题
index.html 网页导航栏添加logo及标题 var scene = window.location.host if (scene === 'anfang.cn') { document.que ...
- android 9.0 SystemUI导航栏添加虚拟按键功能(一)
目录 1.概述 2.SystemUI导航栏添加虚拟按键功能(一)的核心类
- android 11.0 SystemUI导航栏 添加虚拟按键(一)
1.概述 在11.0产品定制化中,SystemUI的相关功能需求需要为导航栏添加虚拟按键来实现某些功能,比如添加wifi,可以通过点击wifi跳转到wifi页面,日期可以弹出当前万年历功能,所以需要对 ...
最新文章
- Confluence5.1 最新版的安装破解汉化
- 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗...
- 一次“ora-12170 tns 连接超时”的经历
- Android应用程序组件Content Provider的启动过程源代码分析(6)
- 算法积累之算法时间复杂度
- 用友ERP服务器的连接
- c语言队列(顺序队列,循环队列,链式队列)
- cdr 表格自动填充文字_「Excel技巧」Excel也可以实现自动填充26英文字母编号
- Python学习14 模块和包
- 7 centos 时钟跟物理机同步_centos7上使用chrony自动同步时间
- python tqdm自定义更新进度条
- Tensorflow——add_layer(添加神经层)
- ojective-C学习笔记(7)Foundation框架
- CentOs6.5安装使用数据恢复软件extundelete
- Oracle单实例开机自启动
- 安卓学习日志 Day15 — 数据库基础
- MT7621搭载openwrt实现U盘等设备自动挂载
- 【转】让ubuntu自带词典可以本地查…
- IoTDB Can not establish connection
- 大国崛起(四)————英国
热门文章
- 一款基于jquery带百分比的响应式进度加载条
- Cocos2dx 中 倒计时保留2位数写法
- 【转】托管函数的挂钩(完美版)
- 【转】经济计量学软件包Eviews快速使用
- [小才能]防备误删文件
- 每列大于0的个数_题目1342——把一个数字减少到0的步骤数
- java atomicinteger_Java多线程进阶(十三)—— J.U.C之atomic框架:AtomicInteger
- 虚拟机无法访问主机mysql_虚拟机linux端mysql数据库无法远程访问的解决办法
- int*类型和int类型_mysql8.0.19中在navicat客户端中int、bigint等类型设置长度保存后为0...
- 上海教师中级职称英语计算机考试,计算机教师如果考过了软考中级对职称评定有用吗,学校会承认嘛,有人懂吗,求助...