点击模态外以关闭模态(反应原生模态)



>有人有实现react-native-modal的经验吗?当我使用它时,当我点击模态之外时,模态不会关闭。

这是我尝试过的

  • Add onBackdropPress(() => {this.props.hideModal()})
  • 在组件内部和外部添加可触摸无反馈
  • 和许多其他方法...

这是我想要显示我的模态的屏幕。

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解决了这个问题。

如果有人遇到库/组件无法像您在文档上看到的那样按预期工作的问题,请尝试检查您的软件包版本号!

干杯!

 <Modal
  isVisible={isModalVisible}
  customBackdrop={
    <View
      style={styles.backDropContainer}
      onTouchEnd={() => setModalVisible(false)}
    />
  }
  onBackdropPress={() => setModalVisible(false)}>
  <View style={styles.modalContainer}>
    <FlatList data={DATA} renderItem={() => <Text>hehehe</Text>} />
  </View>
</Modal>

风格:

const styles = StyleSheet.create({
  backDropContainer: {
    flex: 1,
    backgroundColor: 'black',
    opacity: 0.5,
  },
  modalContainer: {
    flex: 0.5,
    backgroundColor: 'white',
    padding: 10,
    borderRadius: 10,
  },
});

相关内容

  • 没有找到相关文章

最新更新