キーボードを閉じると、閉じる方法がないため、キーボードを閉じない場合の問題がさらに深刻にkeyboardType='numeric'
なります。
ViewをScrollViewで置き換えることは、正しい解決策ではありません。複数textInput
のやを使用している場合button
、キーボードが上にある間にそれらをタップすると、キーボードが非表示になるだけです。
正しい方法は、ビューをカプセル化しTouchableWithoutFeedback
て呼び出しますKeyboard.dismiss()
編集:を使用ScrollView
しkeyboardShouldPersistTaps='handled'
て、タップが子によって処理されない場合(つまり、他のtextInputsまたはボタンをタップする場合)にのみキーボードを非表示にすることができます
あなたが持っている場合
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
に変更
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
または
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
編集:キーボードを閉じるための上位コンポーネントを作成することもできます。
import React from 'react';
import { TouchableWithoutFeedback, Keyboard, View } from 'react-native';
const DismissKeyboardHOC = (Comp) => {
return ({ children, ...props }) => (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<Comp {...props}>
{children}
</Comp>
</TouchableWithoutFeedback>
);
};
const DismissKeyboardView = DismissKeyboardHOC(View)
このように使用するだけです
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
注:これaccessible={false}
は、VoiceOverから引き続き入力フォームにアクセスできるようにするために必要です。視覚障がい者の方々に感謝いたします!