如果你有keyboardType='numeric'
,键盘不解除的问题会变得更严重,因为没有办法解除它。
用 ScrollView 替换 View 不是一个正确的解决方案,就好像你有多个textInput
s 或button
s,在键盘打开时点击它们只会关闭键盘。
正确的方法是封装View withTouchableWithoutFeedback
并调用Keyboard.dismiss()
编辑:您现在可以使用ScrollView
withkeyboardShouldPersistTaps='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 访问。视障人士会感谢你!