如果我点击文本输入,我希望能够点击其他地方以再次关闭键盘(虽然不是返回键)。在我阅读的所有教程和博客文章中,我都没有找到与此相关的任何信息。
这个基本示例仍然不适用于模拟器中的 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',因为没有办法关闭它。
keyboardType='numeric'
用 ScrollView 代替 View 不是一个正确的解决方案,就像你有多个textInputs 或buttons,在键盘启动时点击它们只会关闭键盘。
textInput
button
正确的方法是封装 ViewTouchableWithoutFeedback并调用Keyboard.dismiss()
TouchableWithoutFeedback
Keyboard.dismiss()
编辑:您现在可以使用ScrollViewwithkeyboardShouldPersistTaps='handled'仅在子项未处理点击时关闭键盘(即点击其他 textInputs 或按钮)
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 访问是必需的。有视力障碍的人会感谢你的!
accessible={false}