Проблема с отключением клавиатуры становится еще более серьезной, если у вас есть keyboardType='numeric'
, поскольку нет возможности закрыть ее.
Замена View на ScrollView не является правильным решением, так как если у вас есть несколько textInput
или button
, нажатие на них при поднятой клавиатуре приведет только к отключению клавиатуры.
Правильный способ - инкапсулировать View с помощью TouchableWithoutFeedback
и вызвать Keyboard.dismiss()
РЕДАКТИРОВАТЬ: теперь вы можете использовать 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>
РЕДАКТИРОВАТЬ: вы также можете создать компонент более высокого порядка, чтобы закрыть клавиатуру.
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. Слабовидящие люди будут вам благодарны!
Попробуйте blur (): github.com/facebook/react-native/issues/113
Правильный ответ должен быть от Эрика Кима ниже. Ответ ScrollView (установите для прокрутки значение false) не идеален, если у вас есть несколько вводов текста, он не позволяет вам переходить от ввода текста к вводу текста без закрытия клавиатуры.
Для тех, кому нужно решение для всего приложения, см. Ответ @ Scottmas ниже (ссылка: coderhelper.com/a/49825223/1138273)
keyboard.dismiss()
- это то, что вы ищете.ознакомьтесь с этой ссылкой, чтобы узнать, как это делается coderhelper.com/a/68484617/12482704