React Native(十二)——嵌套WebView中的返回处理
情景描述:
从一个名为“My”的组件点击进去,进入一个列表(该列表内容为webView中内容),其中一个webView也可以点击进入详情页(也为webView),但是如果对导航栏不做任何处理,直接点击返回按钮,便会直接从详情页跳转至最顶层页面,而返回不到该列表内容页;很显然这并非我们想要的效果,于是就需要在原有导航返回事件中增加对webView返回事件的处理,完整代码如下(由于拍的视频格式有问题,就看不了效果图了~~~桑心,只能凑合看看代码了):
export class CommonProblem extends Component {//自定义一个组件
static navigationOptions = ({ navigation }) => {
return {
headerTitle: '常见问题', //导航标题
headerTitleStyle: {
alignSelf: 'center',
textAlign: 'center',
fontSize: 16,
color: '#FFF'
},
headerLeft: (
<TouchableHighlight
activeOpacity={1}
underlayColor={skin.main}
onPress={() => {
navigation.state.params.goBackPage();
}}
>
<View style={{ paddingLeft: 20 }}>
<Icon name="ios-arrow-round-back-outline" size={30} style={{ color: '#FFF' }} />
</View>
</TouchableHighlight>
),
//导航左与导航右是为了让导航标题居中(Why?)
headerRight: <View style={{ paddingRight: 20 }} />
};
};
constructor(props) {
super(props);
this.nav = this.props.navigation;//导航
// 添加返回键监听(对Android原生返回键的处理)
this.addBackAndroidListener(this.nav);
}
componentDidMount() {
this.props.navigation.setParams({//给导航中增加监听事件
goBackPage: this._goBackPage
});
}
//自定义返回事件
_goBackPage = () => {
// 官网中描述:backButtonEnabled: false,表示webView中没有返回事件,为true则表示该webView有回退事件
if (this.state.backButtonEnabled) {
this.refs['webView'].goBack();
} else {//否则返回到上一个页面
this.nav.goBack();
}
};
//获取链接
getSource() {//config.HelpProblemUrlTest是webView的地址(一个独立的H5页面)
if (!config.Release) {
return config.HelpProblemUrlTest;
}
return config.HelpProblemUrl;
}
onNavigationStateChange = navState => {
this.setState({
backButtonEnabled: navState.canGoBack
});
};
// 监听原生返回键事件
addBackAndroidListener(navigator) {
if (Platform.OS === 'android') {
BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);
}
}
onBackAndroid = () => {
if (this.state.backButtonEnabled) {
this.refs['webView'].goBack();
return true;
} else {
return false;
}
};
render() {
let Dimensions = require('Dimensions');
let { width, height } = Dimensions.get('window');
return (
<View style={{ backgroundColor: skin.lightSeparate, flex: 1 }}>
<WebView
source={{ uri: this.getSource() }}
style={{ flex: 10, justifyContent: 'center', alignItems: 'center', width: width }}
ref="webView"
onNavigationStateChange={this.onNavigationStateChange}
/>
</View>
);
}
}
这样就完美的达到了自己想要的问题咯。
React Native(十二)——嵌套WebView中的返回处理的更多相关文章
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...
- vue第十二单元(vue中过渡效果的实现)
第十二单元(vue中过渡效果的实现) #课程目标 熟练掌握transition组件的用法 熟练使用transition组件做过渡特效 熟练使用transition组件做动画特效 了解使用transit ...
- “全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- React Native(十五)——RN中的分享功能
终于,终于,可以总结自己使用RN时的分享功能了-- 为什么呢?且听我慢慢道来吧: 从刚开始接触React Native(2017年9月中旬)就着手于分享功能,直到自己参与公司的rn项目开发中,再到现在 ...
- React Native - 网页组件(WebView)的使用详解
一.WebView组件介绍 使用 WebView 组件我们可以通过 url 来加载显示一个网页,也可以传入一段 html 代码来显示.下面对其主要属性和方法进行介绍. 1,属性介绍 source: ...
- React Native学习(二)之View
React Native组件解析(二)之View 0.JSX React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. ...
- react第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性)
第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性) #课程目标 理解路由的原理及应运 理解react-router-dom以及内置的一些组件 合理应用内置组 ...
- React Native 系列(二) -- React入门知识
前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...
随机推荐
- android 获取配置文件 相对路径
--src --com.example.Demo1 --IndexActivity.class --test.txt 在IndexActivity.class 获取test.txt中的文件 ...
- GDB调试——常用的命令
首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令 ...
- SpringMVC系列(一)SpringMVC概述和搭建SpringMVC的第一个helloWord入门程序
一.SpringMVC 概述 • Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC ...
- Java如何显示小时和分钟?
在Java中,如何显示小时和分钟(当前时间)? 此示例演示如何使用Calender类的Calender.getInstance()来显示某个时刻的小时和分钟. package com.yiibai; ...
- Autofac应用总结
准备: public interface IDAL { void Insert(string commandText); } public class SqlDAL : IDAL { public v ...
- unity--------shader之standard 标准参数
[Unity3D自学记录]Unity5 之 standard参数 标签: unity3d 2016-07-13 10:17 2428人阅读 评论(0) 收藏 举报 分类: Unity3D(70) ...
- mongodb 学习1
基本概念 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式( 文件存储格式为BSON(一种JS ...
- [mysql] linux下使用yum安装mysql
From: http://www.2cto.com/database/201207/141878.html linux下使用yum安装mysql 1.安装 查看有没有安装过: ...
- php判断所在的客户端
//判断是否是手机 function is_mobile() { $agent = strtolower($_SERVER['HTTP_USER_AGENT']); $is_pc = (strpos( ...
- linux cfs调度器_模型实现
调度器真实模型的主要成员变量及与抽象模型的对应关系 I.cfs_rq结构体 a) struct sched_entity *curr 指向当前正在执行的可调度实体.调度器的调度单位 ...