[解決済み] react-nativeでキーボードを隠す
2022-03-16 06:34:29
質問
テキスト入力をタップした場合、他の場所をタップしてキーボードを解除できるようにしたいです(リターンキーではありません)。チュートリアルやブログの記事を読んでも、これに関する情報が少しもありません。
この基本的な例は、シミュレータの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>
解決方法は?
キーボードが解除されない問題は、次のような場合に深刻になります。
keyboardType='numeric'
を解除する方法がないためです。
ViewをScrollViewに置き換えることは、正しい解決策ではありません。
textInput
または
button
の場合、キーボードが表示されているときにタップしてもキーボードは解除されるだけです。
正しい方法は、Viewを
TouchableWithoutFeedback
を呼び出して
Keyboard.dismiss()
EDIT: これで
ScrollView
と共に
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>
EDIT:キーボードを解除するための高次コンポーネントを作成することもできます。
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で引き続き利用できるようにするために必要です。視覚障害者はあなたに感謝することでしょう。
関連
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】プリセットファイルはオブジェクトのエクスポートができない
-
[解決済み] React TypeScriptで作業しているときに、Jestが予期しないトークンに遭遇した
-
[解決済み] ReactJS - SCRIPT1010: 期待される識別子 - IE11 で本番ビルドが実行されない
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] Reactで要素を表示・非表示にする
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] React.createElement: type is invalid -- expected a string.
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] configuration.module に未知のプロパティ 'loaders' があります。
-
[解決済み] React の open mailto E-Mail クライアントの onClick で textarea から本文を取得する。
-
[解決済み] Webpack のコンパイルに失敗した
-
[解決済み] Static HTML elements with event handlers require a role." を修正するにはどうすればよいですか?
-
[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
-
[解決済み] React QueryとReduxの主な違いは何ですか?