代码之家  ›  专栏  ›  技术社区  ›  fun joker

如何在React Native中关闭模式?

  •  0
  • fun joker  · 技术社区  · 5 年前

    我有添加评论按钮,当用户点击添加评论按钮时,他应该能够添加和保存评论。对于注释保存,我使用了模式。现在,当用户单击外部模式时,我想关闭模式。我如何才能做到这是本地响应?

    我指的是这个--gt; Close react native modal by clicking on overlay? 但在我的情况下,解决办法是行不通的。

    注意:我已经添加了关闭模式的按钮,但我想通过单击模式外部来关闭模式。

    代码:

        <View>
                <Modal
                animationType="slide"
                transparent={true}
                visible={this.state.modalVisible}
                onRequestClose={() => {this.setModalVisible(false)}}>
                <TouchableOpacity  
                activeOpacity={1} 
                onPressOut={() => {this.setModalVisible(true)}}
                >
                <ScrollView 
                directionalLockEnabled={true} 
                contentContainerStyle={styles.scrollModal}
                >
                <TouchableWithoutFeedback>
                <View style={styles.commentModal}>
                    <View style={{marginLeft: 20, marginRight: 20}}>
                        <Text style={styles.addCommentModal}>Add a Comment</Text>
                    <View style={styles.textInputModal}>
                        <TextInput 
                            editable = {true}
                            maxLength = {40}
                            multiline = {true}
                            onChangeText={(text) => this.setState({text})}
                            value={this.state.comment_text}
                            onChangeText={(text) => this.setState({comment_text: text})}
                            style={{borderRadius: 1}}
                        />
                    </View>
                    <View style={styles.modalBtnContainer}>
                        <TouchableOpacity onPress={() => this.addComment(this.state.comment_text, logged_in_user.id, marketingPlanId)}>
                            <Text style={styles.saveCommentModal}>Save Comment</Text>
                        </TouchableOpacity>
                    </View>
                    <View style={styles.modalBtnContainer}>
                        <TouchableOpacity onPress={() => this.setModalVisible(false)}>
                            <Text style={styles.closeCommentModal}>Close</Text>
                        </TouchableOpacity>
                    </View>
                    </View>
                </View>
                </TouchableWithoutFeedback> 
                </ScrollView>
                </TouchableOpacity> 
                </Modal>
            </View>
    
    CSS:
    
     commentModal: {
            position: 'absolute', 
            bottom: 0, 
            backgroundColor: '#fff', 
            height: height/2, 
            width: width
        },
        addCommentModal: {
            fontSize: 18, 
            color: '#333', 
            marginTop: 20, 
            fontFamily: 'bold', 
            fontWeight: '500' 
        },
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Uziel Valdez    5 年前

    请注意,在您发布的链接中,他们正在使用 onPressOut 对于 <TouchableOpacity/> 组件和您正在使用 onPress 他一开始也用这个 if (!this.state.modalVisible) return null

        2
  •  1
  •   Rajan Lagah    5 年前

    您可以在模式中添加按钮来关闭它。 尝试

    <Modal>
    ....
     <TouchableOpacity onPress={() =>this.setState({modalVisible:false}))}>
        <Text style={styles.saveCommentModal}>Close</Text>
     </TouchableOpacity>
    ....
    </Modal>