Проблема, связанная с тем, что клавиатура не удаляется, становится более серьезной keyboardType='numeric'
, поскольку у вас нет возможности отменить ее.
Замена View на ScrollView не является правильным решением, так как если у вас есть несколько textInput
s или button
s, нажатие на них, когда клавиатура поднята, приведет к отключению только клавиатуры.
Правильный способ заключается в том, чтобы инкапсулировать 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. Люди с нарушениями зрения будут вам благодарны!