1. 程式人生 > >React Native之彈框存在TextInput,輸入框有焦點情況下需要點選兩次才可觸發事件-解決

React Native之彈框存在TextInput,輸入框有焦點情況下需要點選兩次才可觸發事件-解決

Bug情況描述:React Native專案中,點選按鈕A出現彈框浮層,彈框中需要TextInput輸入數字,鍵盤浮起來;這時候點選 取消按鈕L 或者 確定按鈕R,只是讓鍵盤收起,但是並沒有觸發 取消 或 確定 的事件,必須要再點選第二次才可以觸發。另外,當輸入框有焦點的情況下,點選 螢幕任意位置(除了鍵盤),可使鍵盤收起隱藏;

期待效果:當輸入框輸完數字後,游標焦點仍然存在,鍵盤也未消失,這時候點選一次取消按鈕L即可讓彈框層和鍵盤同時隱藏;點選一次確定按鈕R即可跳轉到另一個頁面;


嘗試的解決方案和解決思路:

1. 用ScrollView包裹TextInput,並且使用keyboardShouldPersistTaps屬性,無效:



2. 給TextInput加上ref屬性,然後在點選事件中加上this.refs.xxx.blur()讓其主動失去焦點,因為失去焦點鍵盤會自動收起。無效。





3.使用TextInput中的onEndEditing結束編輯屬性,有效。


<TextInput
   style={styles.input1}
   placeholder="請輸入簡訊驗證碼"
   placeholderTextColor={Color.CM_InputTextColor}
   maxLength={6}
   keyboardType={'numeric'}
   onChangeText={(code) => {
      if (this.state.jdAuth) {
         Config.JDMobileCode = code;
      }else {
         Config.ChinaMobileCode = code;
      }
      this.setState({
         password: code
      })
   }}
   value={this.state.password}
   onEndEditing={()=>{this.endEdit()}}
/>



由於我這裡是有取消和確定兩個按鈕需要觸發事件的,我在初始化的時候定義了一個標誌位變數,用來表示點選的是左按鈕還是右按鈕,然後在其相應的事件中賦值不同標誌位。在執行了endEdit()函式中判斷標誌位的值,進而執行取消事件還是確定事件,即可。

endEdit(){
        if(this.state.isLeft==1){
            this.hideModal();
        }else if(this.state.isLeft==2){
            this.btnOK();
        }
    }


注:目前仍存在一點問題,有更好的解決辦法,日後會持續更新。。。也歡迎大佬們留言板分享最佳解決方案

==============================更新======================================

上次說的還有點問題,是第二次進入的時候,第一次點選確定或者取消按鈕可以觸發。現在bug解決了,新增以下程式碼:

1.在TextInput元件中加入onSubmitEditing屬性,且執行讓鍵盤主動消失的函式;

<TextInput
    ref="inputWR"
    style={styles.input1}
    placeholder="請輸入簡訊驗證碼"
    placeholderTextColor={Color.CM_InputTextColor}
    maxLength={6}
    keyboardType={'numeric'}
    onChangeText={(code) => {
        if (this.state.jdAuth) {
            Config.JDMobileCode = code;
        }
        else {
            Config.ChinaMobileCode = code;
        }
        this.setState({
            password: code
        })
    }}
    value={this.state.password}
    onEndEditing={()=> {
        this.testWR()
    }}
    onSubmitEditing={()=>{this.testBlur()}}
/>

2.寫testBlur函式:
 testBlur(){
        this.refs.inputWR.blur();
}

現在測試完美了~~~~~~

相關推薦

React Native存在TextInput輸入焦點情況需要觸發事件-解決

Bug情況描述:React Native專案中,點選按鈕A出現彈框浮層,彈框中需要TextInput輸入數字,鍵盤浮起來;這時候點選 取消按鈕L 或者 確定按鈕R,只是讓鍵盤收起,但是並沒有觸發 取消

android edittext 出輸入法的解決方法之一

editText: 據說第一次是編輯框焦點,第二次才是點選事件,輸入法軟鍵盤才會彈出. 既然這樣, 那就呼叫程式碼呼叫兩次點選事件.算是一種解決方法. holder.editText.setVisib

React native ES6語法(promise箭頭函式)

這裡總結幾個ES6與ES5區別中常用的幾塊。 一、箭頭函式 ES6中提供了使用(=>)符號來定義函式。 箭頭函式是用箭頭符號在需要回調函式的地方之間定義不需要名稱,程式碼簡潔。 將需要的引數放在=>前的()中即可,=>後就是函式體,

React Native 手機back鍵退出程式

解決點選兩次手機back鍵退出程式程式碼及註釋如下: //雙擊返回鍵退出程式 //新增BackHandler,ToastAndroid的註冊 componentWillMount(){//執行一次,在初始化render之前執行, BackHan

給button繫結click事件出現ajax請求時提交的問題解決

$(function(){ $('#jsStayBtn').off().on('click', function(){ $.ajax({ cache: false, type: "POST",

vue click ios11 第二有效vue click ios11 第二有效

背景: 最近我們的vue專案部分彈窗按鈕出現點選時候需要點選第二次的時候才會觸發 裝置: 系統:ios11.01(15A402) 微信版本:6.5.23 第一反應是我們的程式出了問題 [email

Android Button按鈕之後執行事件的操作。

    在我的專案裡有個頁面同時存在 一個EditText和一個Button。如圖。 由於每次進入這個頁面都彈出軟鍵盤,所以我在這個提交訂單頁面的AndroidManifest.xml中聲明瞭一句 android:windowSoftInputMode="stateH

Flutter學習筆記(26)--返回攔截WillPopScope實現1秒內返回按鈕退出程式

如需轉載,請註明出處:Flutter學習筆記(26)--返回攔截WillPopScope,實現1秒內點選兩次返回按鈕退出程式 在實際開發中,為了防止使用者誤觸返回按鈕導致程式退出,通常會設定為在1秒內連續點選兩次才會退出應用程式。Android中一般的處理方式是在onKeyDown方法內做計時處理,當keyC

React Native TextInput使用

前言 學習本系列內容需要具備一定 HTML 開發基礎,沒有基礎的朋友可以先轉至 HTML快速入門(一) 學習 本人接觸 React Native 時間並不是特別長,所以對其中的內容和性質瞭解可能會有所偏差,在學習中如果有錯會及時修改內容,也歡迎萬能的朋友們批評指出

React Native Android混合開發及遇到的各種坑

最近自己也是剛在學習React Native的知識,在學習到React Native 嵌入到原生應用的時候,感覺遇到了各種坑,這裡做一下記錄。若有說得不對的地方,謝謝大家糾正。 React Native嵌入到原生應用的教程在其官方指導文件裡也有,但是感覺很多注意點沒講到,現

React-nativeflexDirectionjustifyContent

1、flexDirection 佈局中子檢視排放的方向。有兩個值:水平軸(row),豎直軸(column)。預設是豎直軸。 flexDirection:'row' flexDirection:'column' 'use strict'; import React,{C

React-NativeXcode虛擬機器快捷鍵重新整理和出選單不能用

1:描述  有時候執行在Xcode虛擬機器上的react-native專案  command+T和command+D沒有效果 2:原因 其實這個問題主要是由於iOS Simulator和鍵盤之間斷開了連線導致的, 也就是說iOS Simulator不在接受鍵盤的事件

React NativeFlatListlistview的升級版

RN的0.43版終於出來了,現在大家期待已久的listview的升級版flatlist終於跟大家見面了,我也是關注了好久哦,現在將使用說明,和例子給大家簡單的講解下。http://www.jianshu.com/p/37f7a3d4f114 簡單的講解下api: fl

React Native使用“Debug JS Remote”時出現白屏跨域問題

啟用“Debug JS Remote”出現白屏,主要原因就是瀏覽器跨域限制,從而導致不能通過瀏覽器進行web除錯的目的。 解決方

React NativeTouchable四組件

width font clas 容易 原生 ber 支持 cit out 一、TouchableHighlight 概念: 本組件用於封裝視圖,使其可以正確響應觸摸操作。當按下的時候,封裝的視圖的不透明度會降低,同時會有一個底層的顏色透過而被用戶看到,使得視圖變暗或變亮。

React Native登錄界面的布局

處理器 圖片 blank 轉載 圓角 print extends cit hit 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 代碼註釋比較詳細 /** * Sample React Native App * https://github.com/fa

react-native遠程圖片修改後APP不更新

reactnative react-native react native 刷新圖片 base64今天在做客戶的項目時,有一個需求是App上要顯示遠端的圖片,而遠端的圖片有可能會更新,但圖片名不變。在react-native中,顯示圖片是用的自帶的Image組件,大家都知道react在更新組件之前都會判斷pr

使用WebStorm開發React-native基礎

ttr regexp 渲染 hang reg 路徑 tostring png text 配置問題: (1)找不到SDK路徑,或者沒有SDK對應的版本:SDK必須是android-23才可以(更新SDK) 解決方法:環境變量,必須設置Android_HOME

react-native模擬器調試

adb div connect oid native 令行 input 模擬 key 手動觸發搖一搖:adb shell input keyevent 82(有時模擬器搖一搖無效) android studio檢測不到模擬器: 命令行cd到模擬器安裝目錄,找到adb.exe

React Nativethis詳解

過程 show super try this registry alert item rop this引起的錯誤詳解 我們在學習React Native的過程中,肯定經常遇見過undefined is not an object這樣的問題吧,尤其是剛開始學習的