1. 程式人生 > >React-native 學習之Confirm彈出框

React-native 學習之Confirm彈出框

```
/**
 * 功能: Confirm對話方塊
 */
/*visible bool 控制彈出框隱藏(false)或顯示(true)
transparent bool 控制彈出框背景,若為false則彈出框背景為灰色,會擋住彈出框後面的內容,true時才為modal根檢視的背景顏色。
animationType string 控制彈出框的動畫效果 有三個值:none slide fade
onRequestClose func 當請求關閉時執行*/
'use strict';
/**
 * 匯入模組
 */
// 系統模組
import React, { Component } from 'react'
; import { StyleSheet, Text, View, Image, TouchableHighlight, Modal, } from 'react-native'; import PropTypes from 'prop-types'; // 自定義模組 /** * 匯入樣式 * */ // 自定義樣式: 容器樣式、引入列表項樣式 import {Dialog} from '../style/AppStyle'; /** * 常量 */ export default class ConfirmDialog extends Component
{
static propTypes = { title:PropTypes.string.isRequired, // 對話方塊標題 message:PropTypes.string.isRequired, // 對話方塊標題 buttonLeftName: PropTypes.string.isRequired, // 按鈕左名字 buttonRightName: PropTypes.string.isRequired, // 按鈕右名字 onLeftPress: PropTypes.func.isRequired, // 回撥函式左
onRightPress: PropTypes.func.isRequired, // 回撥函式右 }; constructor(props) { super(props);
    // 繫結事件
    this._onLeftPress  = this._onLeftPress.bind(this);  // 需要在回撥函式中使用this,必須使用bind(this)來繫結
    this._onRightPress  = this._onRightPress.bind(this);  // 需要在回撥函式中使用this,必須使用bind(this)來繫結
}
_onLeftPress() {
    if (this.props.onLeftPress) {   // 在設定了回撥函式的情況下
        this.props.onLeftPress(this.props.pageName);  // 執行回撥
    }
}
_onRightPress() {
    if (this.props.onRightPress) {   // 在設定了回撥函式的情況下
        this.props.onRightPress(this.props.pageName);  // 執行回撥
    }
}
render() {
    return (
        <Modal
            visible={this.props.visibility}
            transparent={true}
            animationType={'fade'}//none slide fade
            onRequestClose={()=>this.setState({visibility:false})}
        >
            <View style={Dialog.container}>
                <View style={Dialog.modalContainer}>
                    <Text style={Dialog.modalTitle}>{this.props.title}</Text>
                    <Text style={Dialog.modalMessage}>{this.props.message}</Text>
                    <View style={Dialog.horizonLine}/>
                    <View style={Dialog.row}>
                        <TouchableHighlight style={Dialog.leftBn} onPress={this.props.onLeftPress}  underlayColor={'#FFFFFF'} >
                            <Text style={Dialog.leftBnText}>{this.props.buttonLeftName}</Text>
                        </TouchableHighlight>
                        <View style={Dialog.verticalLine}/>
                        <TouchableHighlight style={Dialog.rightBn} onPress={this.props.onRightPress} underlayColor={'#FFFFFF'} >
                            <Text style={Dialog.rightBnText}>{this.props.buttonRightName}</Text>
                        </TouchableHighlight>
                    </View>
                </View>
            </View>
        </Modal>
    )
}

}

貼出樣式:

container:{
        flex:1,
        backgroundColor:'rgba(0, 0, 0, 0.5)',
        justifyContent:'center',
        alignItems:'center'
    },
    modalContainer: {
        marginLeft: 20,
        marginRight: 20,
        borderRadius: 3,
        backgroundColor: "white",
        alignItems:'center',
    },
    modalTitle: {
        color: '#000000',
        fontSize: 16,
        marginTop: 10,
    },
    modalMessage:{
        color:'#8a8a8a',
        fontSize:14,
        margin:10,
    },
    row:{
        flexDirection:'row',
        alignItems:'center',
    },
    horizonLine:{
        backgroundColor:'#9f9fa3',
        height:0.5,
        alignSelf:'stretch'
    },
    verticalLine:{
        backgroundColor:'#9f9fa3',
        width:1,
        alignSelf:'stretch'
    },
    leftBn:{
        borderBottomLeftRadius:3,
        padding:7,
        flexGrow:1,
        justifyContent:'center',
        alignItems:'center',
    },
    leftBnText:{
        fontSize:16,
        color:'#8a8a8a',
    },
    rightBn:{
        borderBottomRightRadius:3,
        padding:7,
        flexGrow:1,
        justifyContent:'center',
        alignItems:'center',
    },
    rightBnText:{
        fontSize:16,
        color:'#00A9F2'
    }

用法

<ConfirmDialog title="標題" message="訊息"  ref="_customModal" visibility={this.state.modalVisibility}
               buttonLeftName="取消" buttonRightName="確定"
               onLeftPress={()=>{
                   Alert.alert('取消!');
                   this.setState({modalVisibility:false})
               }}

               onRightPress={()=>{
                   Alert.alert('返回!');
                   this.setState({modalVisibility:false})
               }}
/>

相關推薦

React-native 學習Confirm

``` /** * 功能: Confirm對話方塊 */ /*visible bool 控制彈出框隱藏(false)或顯示(true) transparent bool 控制彈出框背景,若為false則彈出框背景為灰色,會擋住彈出框後面的內容,true時才為

React-native 學習AlertDialog

/** * 功能: alert對話方塊 */ 'use strict'; /** * 匯入模組 */ // 系統模組 import React, { Component } from 'react'; import { StyleSheet,

React Native API模組Alert詳解及使用

(一)前言 今天我們繼續來一個Android、iOS平臺通用的彈出框Alert模組。 剛建立的React Native技術交流2群(496601483),歡迎各位大牛,React Native技術愛好者加入交流!同時部落格右側歡迎微信掃描關注訂閱號,移動技術乾貨,精彩文章技術推送! 該Alert模組

react native 學習 native modules

每一個 nsstring類 了解 lba 執行過程 span nsnumber 開發 github 翻譯自https://facebook.github.io/react-native/docs/native-modules-ios.html Native Module

React-Native學習 防止鍵盤遮擋TextInput

import React, {Component} from 'react'; import ReactNative, { AppRegistry, StyleSheet, Text, View, Image, TextInput,

React-Native學習第三方開源元件--側滑欄----react-native-side-menu

react-native-side-menu 側滑欄元件 1.匯入方式 切換到當前目錄在命令列執行下面的命令 npm install react-native-side-menu --save 開啟package.json檢視是否成功匯入

React-Native學習 圖片做背景 modal 點選其他區域消失

1.modal點選其他區域消失 <TouchableWithoutFeedback onPress={()=>this.setState({showTopMenu:false})}> <View style={{position:

(React-Native 學習四) RN 官方Demo 搭建 RNTester 執行

一,前言:         學習react-native相信對於我們最好的教程就是官方教程。因此學習和檢視官方demo。是我們學習進步的階梯。本文是博主學習react-native中遇到的一些基本問題,分享出來供大家學習和參考: 二,準備工作:    

React Native學習JavaScript語法轉換器

JavaScript語法轉換器 語法轉換器可以使編寫程式碼的過程更加享受,因為開發者可以藉助轉換器直接使用新的JavaScirpt語法標準,而無需等待JS直譯器的支援。 React Native從0.5.0版本開始已經內建Babel轉換器。你可以檢視Babe

一.React-Native學習Window環境下搭建環境配置

一.安裝JDK       1.從Java官網下載JDK並安裝。 也可以從百度雲下載x64版本       2.安裝成功可以用java -version檢視版本資訊       3. 配置環境變數   JAVA_HOME=C:\Program Files\Java\

react native 學習模仿”探探“實現豆瓣電影app部分功能

一、 首先配置環境 當然是node 下用npm  npm install -g react-native-cli然後建立專案react-native init react1 cd react1 react-native run-android 新開一個cmd 啟動專案 re

【原創】東方耀react native學習-37AsyncStorage

AsyncStorage是一個簡單的、具有非同步特性的鍵值對的儲存系統,全域性的!替代LocalStorage AsyncStorage裡面都有一個回撥函式,而回調的第一個引數都是錯誤物件,如果發生錯誤,該物件就會展示錯誤資訊,否則為null;每個方法都會返回

去掉移動端alert和confirm攜帶url連結

/** * 去掉移動端alert彈出框攜帶url連結 */ window.alert = function(name){ var iframe = do

重置$.messager.confirm 的高度,以及顯示的文字

$.messager.defaults = { ok: "需要",collapsible:false,minimizable:false,maximizable:false,resizable:false,cancel:"不需要",width:'250px',height:'

React-Native 學習--問題處理 一. github上下載的專案不能執行?

在github上下載的專案不能執行? 出現”RCTRootView.h” file not found 紅色提示 如圖. 這是依賴庫沒有下載, 可以在專案的根目錄下 輸入 npm install , 或者 直接拷一份node_modules到跟目錄下就可

React Native 學習Image元件

/** * @Author: fantasy * @Date:   2016-06-13T17:27:21+08:00 * @Last modified by:   fantasy * @Last modified time: 2016-07-11T10:45:42+08:

React-Native學習路(九)TabNavigator隱藏問題的分析及解決

首先說明一下我是用的TabNavigator+StackNavigator來寫的頁面跳轉。 我們先分析一下為什麼在每個Tab的Item裡面實現跳轉,跳轉頁面還是會有底部的TabNvigator 先看下我出問題的專案結構,首先,我們可以看到我給這個Tab的Item指定的

Discuz!開發js函式showDialog介紹

showDialog定義地址:\static\js\common.js var showDialogST = null; function showDialog(msg, mode, t, func, cover, funccancel, leftmsg, confirmt

去掉alert,confirm顯示的url

重寫兩個方法,即可達到要求,防範如下,寫在<script>裡即可 <script> window.alert = function(name){

React Native 學習路:Unable to load script from assets 'index.android.bundle'.

 最近總遇到這個問題:問題背景:1.伺服器已啟動2.裝置插入了兩個裝置(模擬器與真機)3.之後出現以下報錯問題Unable to load script from assets 'index.android.bundle'. Make sure your bundle is