如果您有键盘,则无法解雇的问题变得更加严重keyboardType='numeric'
,因为无法解雇它。
用ScrollView替换View是不正确的解决方案,因为如果您有多个textInput
s或button
s,则在键盘向上的同时点击它们只会关闭键盘。
正确的方法是用TouchableWithoutFeedback
和封装ViewKeyboard.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访问输入表单。视障人士将感谢您!