TextInput Cannot Blur on Android

#React Native

whck6

在 Android 平台上執行 React Native 0.51 遇到的一個問題。

畫面上有 4 個輸入框,我不希望使用者可以手動點擊要輸入的是哪一個,因此我鎖住鎖住手勢事件,然後透過 event 來取得焦點。

iOS 上可以正常運作,使用者可以透過我準備的按鈕把鍵盤彈起,但 Android 使用者按返回鍵把鍵盤收起來(或是系統的行為。如:收到簡訊),就無法在彈起了。

經由實驗的結果發現,假如使用者不是自己按下鍵盤上的完成使鍵盤收起,這將會導致 TextInput 不會呼叫 blur() .

意思是焦點並沒有消失,導致下次就算呼叫 focus() 也並不會有 state 的改變,為了解決這問題,我的方法是監聽鍵盤被收起的時候,手動 blur() .

class AAA {
  componentDidMount() {
    this.keyboardDidHideListener = Keyboard.addListener(
      "keyboardDidHide",
      this.keyboardDidHide,
    );
  }

  componentWillUnmount() {
    this.keyboardDidHideListener.remove();
  }

  keyboardDidHide = () => {
    this.input.blur();
  };
}