テキスト入力をタップした場合、キーボードを再び閉じるために別の場所をタップできるようにしたいです (ただし、リターンキーではありません)。私が読んだすべてのチュートリアルやブログ投稿で、これに関する情報を少しも見つけることができませんでした。
この基本的な例は、シミュレーターの react-native 0.4.2 ではまだ動作しません。まだ iPhone で試すことができません。
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
<TextInput
style={{height: 40, borderColor: 'gray', borderWidth: 1}}
onEndEditing={this.clearFocus}
/>
</View>
ベストアンサー1
キーボードが閉じない問題は、 がある場合keyboardType='numeric'
、閉じる方法がないため、さらに深刻になります。
textInput
View を ScrollView に置き換えることは正しい解決策ではありません。複数のまたは がある場合button
、キーボードが開いているときにそれらをタップすると、キーボードが閉じられるだけです。
正しい方法は、Viewをカプセル化してTouchableWithoutFeedback
呼び出すことです。Keyboard.dismiss()
編集:タップが子によって処理されない場合 (つまり、他のテキスト入力またはボタンをタップした場合) にのみキーボードを閉じるためにScrollView
withを使用できるようになりました。keyboardShouldPersistTaps='handled'
あなたが持っている場合
<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 を通じて引き続きアクセスできるようにするには、 が必要です。視覚障害のある人は感謝するでしょう!