点击模态外部以关闭模态(react-native-modal)
Tap outside of modal to close modal (react-native-modal)
有人有实施react-native-modal
的经验吗?
当我使用它时,当我在模态之外点击时,模态不会关闭。
这是我试过的方法
- 添加 onBackdropPress(() => {this.props.hideModal()})
- 在组件内部和外部添加 TouchableWithoutFeedback
- 和许多其他方法...
这是我要显示模态的屏幕。
render() {
return (
<View style={{flex: 1}}>
<ScrollView>
// CONTENT HERE
{this._renderModal()} //rendering modal here
<FABs onFABsPress={this._showModal} /> // I open Modal when I press the FABs button
</ScrollView>
</View>
)
);
_renderModal = () => {
return (
<CameraImageSelectModal
hideModal={this._hideModal}
isModalVisible={this.state.isModalVisible}
navigation={this.props.navigation}
/>
)
}
这是模态组件:CameraImageSelectModal.js
render() {
let { isModalVisible } = this.props;
return (
<View>
<Modal
isVisible={isModalVisible}
onBackdropPress={() => {console.log('hey')}}>
transparent={true}>
<View style={styles.modalContainer}>
<View style={styles.modalTitleTextContainer}>
<Text style={styles.modalTitleText}>Hello World</Text>
</View>
<View style={styles.modalContentTextContainer}>
<Text style={styles.modalContentText}></Text>
</View>
<View style={styles.modalButtonContainer}>
<Button transparent onPress={this._handleCameraPress}>
<Text style={[styles.modalText, styles.black]}>Camera</Text>
</Button>
<Button transparent onPress={this._handleAlbumPress}>
<Text style={styles.modalText}>Album</Text>
</Button>
</View>
</View>
</Modal>
</View>
谢谢!!
我不认为模态具有内置功能,但您可以创建自己的组件。这是一个快速的实现。您可能不得不乱用填充和边距来获得您喜欢的效果,但这将允许在按下外部时关闭模态。
import React, { Component } from "react"
import { Modal, StyleSheet, View, TouchableHighlight } from "react-native"
const styles = StyleSheet.create({
container: {
zIndex: 1,
margin: 25,
backgroundColor: "white"
},
background: {
flex: 1
},
outerContainer: {
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
justifyContent: "center"
}
})
const MyModal = props => (
<Modal transparent={true} animationType={"slide"} visible={props.visible} onRequestClose={() => props.onRequestClose()}>
<TouchableHighlight style={styles.background} onPress={() => props.onRequestClose()} underlayColor={"transparent"}>
<View />
</TouchableHighlight>
<View style={ styles.outerContainer }>
<View style={styles.container}>
{props.children}
</View>
</View>
</Modal>
)
export { MyModal }
我刚刚弄明白为什么 onBackdropPress = {() => console.log("Pressed")}
不起作用..!!! onBackdropPress 属性 自其版本 3.xx 以来添加,我使用的是 2.5.0 版本。
所以yarn update react-native-modal
解决了这个问题。
如果有人遇到 library/component 无法像您在文档中看到的那样正常工作的问题,请尝试检查您的软件包版本号!
干杯!
有人有实施react-native-modal
的经验吗?
当我使用它时,当我在模态之外点击时,模态不会关闭。
这是我试过的方法
- 添加 onBackdropPress(() => {this.props.hideModal()})
- 在组件内部和外部添加 TouchableWithoutFeedback
- 和许多其他方法...
这是我要显示模态的屏幕。
render() {
return (
<View style={{flex: 1}}>
<ScrollView>
// CONTENT HERE
{this._renderModal()} //rendering modal here
<FABs onFABsPress={this._showModal} /> // I open Modal when I press the FABs button
</ScrollView>
</View>
)
);
_renderModal = () => {
return (
<CameraImageSelectModal
hideModal={this._hideModal}
isModalVisible={this.state.isModalVisible}
navigation={this.props.navigation}
/>
)
}
这是模态组件:CameraImageSelectModal.js
render() {
let { isModalVisible } = this.props;
return (
<View>
<Modal
isVisible={isModalVisible}
onBackdropPress={() => {console.log('hey')}}>
transparent={true}>
<View style={styles.modalContainer}>
<View style={styles.modalTitleTextContainer}>
<Text style={styles.modalTitleText}>Hello World</Text>
</View>
<View style={styles.modalContentTextContainer}>
<Text style={styles.modalContentText}></Text>
</View>
<View style={styles.modalButtonContainer}>
<Button transparent onPress={this._handleCameraPress}>
<Text style={[styles.modalText, styles.black]}>Camera</Text>
</Button>
<Button transparent onPress={this._handleAlbumPress}>
<Text style={styles.modalText}>Album</Text>
</Button>
</View>
</View>
</Modal>
</View>
谢谢!!
我不认为模态具有内置功能,但您可以创建自己的组件。这是一个快速的实现。您可能不得不乱用填充和边距来获得您喜欢的效果,但这将允许在按下外部时关闭模态。
import React, { Component } from "react"
import { Modal, StyleSheet, View, TouchableHighlight } from "react-native"
const styles = StyleSheet.create({
container: {
zIndex: 1,
margin: 25,
backgroundColor: "white"
},
background: {
flex: 1
},
outerContainer: {
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
justifyContent: "center"
}
})
const MyModal = props => (
<Modal transparent={true} animationType={"slide"} visible={props.visible} onRequestClose={() => props.onRequestClose()}>
<TouchableHighlight style={styles.background} onPress={() => props.onRequestClose()} underlayColor={"transparent"}>
<View />
</TouchableHighlight>
<View style={ styles.outerContainer }>
<View style={styles.container}>
{props.children}
</View>
</View>
</Modal>
)
export { MyModal }
我刚刚弄明白为什么 onBackdropPress = {() => console.log("Pressed")}
不起作用..!!! onBackdropPress 属性 自其版本 3.xx 以来添加,我使用的是 2.5.0 版本。
所以yarn update react-native-modal
解决了这个问题。
如果有人遇到 library/component 无法像您在文档中看到的那样正常工作的问题,请尝试检查您的软件包版本号!
干杯!