[RN] React Native 自定义 底部 弹出 选择框 实现
React Native 自定义 底部选择框 实现
效果如图所示:

实现方法:
一、组件封装
CustomAlertDialog.js
import React, {Component} from 'react';
import {Dimensions, Modal, StyleSheet, Text, TouchableOpacity, View} from 'react-native';
const {width} = Dimensions.get('window');
export default class CustomAlertDialog extends Component {
constructor(props) {
super(props);
this.state = {
isVisible: this.props.show,
};
this.entityList = this.props.entityList;
}
componentWillReceiveProps(nextProps) {
this.setState({isVisible: nextProps.show});
}
closeModal() {
this.setState({
isVisible: false
});
this.props.closeModal(false);
}
renderItem(item, i) {
return (
<TouchableOpacity key={i} onPress={this.choose.bind(this, i)} style={styles.item}>
<Text style={styles.itemText}>{item}</Text>
</TouchableOpacity>
);
}
choose(i) {
if (this.state.isVisible) {
this.props.callback(i);
this.closeModal();
}
}
renderDialog() {
return (
<View style={styles.modalStyle}>
<View style={styles.optArea}>
{
this.entityList.map((item, i) => this.renderItem(item, i))
}
</View>
</View>
)
}
render() {
return (
<View style={{flex: }}>
<Modal
transparent={true}
visible={this.state.isVisible}
animationType={'fade'}
onRequestClose={() => this.closeModal()}>
<TouchableOpacity style={styles.container} activeOpacity={}
onPress={() => this.closeModal()}>
{this.renderDialog()}
</TouchableOpacity>
</Modal>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: ,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
},
modalStyle: {
position: "absolute",
left: ,
bottom: ,
width: width,
flex: ,
flexDirection: "column",
backgroundColor: '#ffffff',
},
optArea: {
flex: ,
flexDirection: 'column',
marginTop: ,
marginBottom: ,
},
item: {
width: width,
height: ,
paddingLeft: ,
paddingRight: ,
alignItems: 'center',
},
itemText: {
fontSize: ,
},
cancel: {
width: width,
height: ,
marginTop: ,
alignItems: 'center',
backgroundColor: '#ffffff'
},
});
使用
TestCustomAlert.js
import React, {Component} from "react";
import {StyleSheet, Text, TouchableHighlight, View,} from 'react-native';
import CustomAlertDialog from "./CustomAlertDialog";
const typeArr = ["不限", "男", "女"];
export default class TestCustomAlert extends Component {
constructor(props) {
super(props);
this.state = {
typeName: '性别',
type: ,
showTypePop: false,
}
}
_openTypeDialog() {
this.setState({showTypePop: !this.state.showTypePop})
}
render() {
return (
<View style={{flex: }}>
<TouchableHighlight onPress={() => this._openTypeDialog()} style={styles.button}
underlayColor="#a5a5a5">
<Text>{this.state.typeName}-{this.state.type}</Text>
</TouchableHighlight>
<CustomAlertDialog entityList={typeArr} callback={(i) => {
this.setState({
type: i,
typeName: typeArr[i],
})
}} show={this.state.showTypePop} closeModal={(show) => {
this.setState({
showTypePop: show
})
}}/>
</View>
);
}
}
const styles = StyleSheet.create({
button: {
margin: ,
backgroundColor: 'white',
padding: ,
borderBottomWidth: StyleSheet.hairlineWidth,
borderBottomColor: '#cdcdcd'
},
});
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/11038382.html
转载请著名出处!谢谢~~
[RN] React Native 自定义 底部 弹出 选择框 实现的更多相关文章
- [deviceone开发]-底部弹出选择
一.简介 个人上传的第一个示例源码,两天空闲时间写的,一点简单组件,写的挺乱还没啥注释,仅供新手学习. 底部弹出选择,可滑动选择选项,如果停留在选项中间,可自动校正位置,加了一点简单的动画效果,需要的 ...
- 【ABAP系列】SAP ALV 导出报表数据 始终使用选定的格式”,一旦勾上,就再也不会弹出选择框了。
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ALV 导出报表数据 始 ...
- [RN] React Native 自定义导航栏随滚动渐变
React Native 自定义导航栏随滚动渐变 实现效果预览: 代码实现: 1.定义导航栏 NavPage.js import React, {Component} from 'react'; im ...
- 微信小程序之 动画 —— 自定义底部弹出层
wxml: <view class='buy' bindtap='showBuyModal'>立即购买</view> <!-- 点击立即购买 弹出购买遮罩层 --> ...
- Jquery实现弹出选择框选择后返回,支持多级分类
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- appium+python自动化98-非select弹出选择框定位解决
前言 遇到问题:document.getElementsByClassName(...)[0] is undefined 选择框如果是select标签的,可以直接用select专用的方法去定位点击操作 ...
- 框架-弹出选择框(Jquery传递Json数组)
给一个button按钮,执行方法 Json传值$("body").on("click", "#btnsure", function() { ...
- 微信小程序之自定义底部弹出框动画
最近做小程序时,会经常用到各种弹框.直接做显示和隐藏虽然也能达到效果,但是体验性太差,也比较简单粗暴.想要美美地玩,添加点动画还是非常有必要的.下面做一个底部上滑的弹框. wxml <view ...
- Android仿IOS底部弹出选择菜单ActionSheet
使用Dialog的实现方式,解决原ActionSheet使用Fragment实现而出现的部分手机取消按钮被遮盖的问题 java部分代码: import android.app.Dialog; impo ...
随机推荐
- 使用windows 上的远程连接来远程Linux Ubuntu系统的设置
实验环境: Windows 10 , VMware Workstation ,Ubuntu16.04 1.root登录ubuntu,然后执行下面的命令 # root账户登录ubuntu ,执行下面的命 ...
- 浙大版《C语言程序设计(第3版)》题目集 --总结
浙大版<C语言程序设计(第3版)>题目集 此篇博客意义为总结pta上浙大版<C语言程序设计(第3版)>题目集所做题目的错误点,心得体会. 1.练习2-10 计算分段函数[1] ...
- Code Review最佳实践(转)
我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要求,代 ...
- 【题解】宫廷守卫 [P1263]
[题解]宫廷守卫 [P1263] 传送门:宫廷守卫 \([P1263]\) [题目描述] 给出一个 \(n*m\) 的方格图,分别用整数 \(0,1,2\) 表示空地.陷阱.墙,空地上可以放置守卫,如 ...
- Elastic Stack 证书创建
1.创建CA证书 ./bin/elasticsearch-certutil ca # 默认文件名:elastic-stack-ca.p12 2.生成节点使用的证书 ./bin/elasticsearc ...
- HBase统计表行数(RowCount)的四种方法
背景:对于其他数据存储系统来说,统计表的行数是再基本不过的操作了,一般实现都非常简单:但对于HBase这种key-value存储结构的列式数据库,统计 RowCount 的方法却有好几种不同的花样,并 ...
- STMP发送邮件(C#)
记录一下使用SMTP协议发送邮件 public void Mail() { try { System.Net.Mail.SmtpClient client = new System.Net.Mail. ...
- UNION ALL \UNION
(一)UNION ALL \UNION 的用法和区别 UNION UNION ALL 用途 用于使用SELECT语句组合两个或多个表的结果集. 用于使用SELECT语句组合两个或多个表的 ...
- select into 与 insert into select
1.select into select into 语句把一个表中的数据插入到另一个表中. 不需要创建临时表,在运行过程中自动创建. 基本语法: select * into #table_Name f ...
- ActionMq + mqttws3.1 实现持久化订阅
activemq版本:5.15.3 Eclipse Paho MQTT JavaScript library mqttws3.1:在amq安装目录下webapp-demo目录下可以找到 实现步骤请阅读 ...