美文网首页
处理react native TextInput键盘遮挡问题

处理react native TextInput键盘遮挡问题

作者: 以德扶人 | 来源:发表于2017-03-22 14:16 被阅读4115次

    最近在项目中,使用TextInput组件的时候,发现键盘弹出的时候,遮盖了表单。
    在ReactNative中是否有处理方法呢?
    答案是肯定的,我们使用ScrollVIew的scrollTo方法,我们也主要是讲这种方法。

    具体方案如下:
    组件render方法中使用ScrollView,并且设置scrollview的keyboardShouldPersistTaps={true}
    keyboardShouldPersistTaps bool 默认值为false。
    当此属性为false的时候,在软键盘激活之后,点击焦点文本输入框以外的地方,键盘就会隐藏。如果为true,滚动视图不会响应点击操作,并且键盘不会自动消失。
    在scrollview中用一个view作为Container包裹所有剩余的子视图,比如Text,TouchableHighlight之类的;并且用onStartShouldSetResponderCapture截取该view的事件,用以解决当点击页面上的按钮时,第一次点击只会收起键盘,第二次点击才会响应按钮方法的bug。然后在TextInput的onFocus方法中滚动scrollview,在onEndEditing中恢复scrollview的滚动。

    具体的代码如下:
    在render方法里定义一个ScrollView,在ScrollView中有一个子View。

         <ScrollView ref='scroll' keyboardShouldPersistTaps={true} >  
           <View onStartShouldSetResponderCapture={(e) => {  
        let target = e.nativeEvent.target;  
        if (target !== ReactNative.findNodeHandle(this.refs.hour) ) {  
            this.refs.hour.blur();  
        }  
           }}>  
           </View>  
         </ScrollView>  
    

    View里的TextInput的代码如下:

        <TextInput  
          style={styles.ksValueView}  
          maxLength={2}  
          placeholder="0"  
          placeholderTextColor="#b2b2b2"  
          multiline={false}  
          onChangeText={this.changeHour.bind(this)}  
          keyboardType="numeric"  
          ref = 'hour'  
          onFocus={this.scrollViewTo.bind(this)}  
          onEndEditing={()=>{this.refs.scroll.scrollTo({y:0,x:0,animated:true})}}  
          />  
    

    onFocus方法中滚动scrollview,在onEndEditing中恢复scrollview的滚动。
    滚动函数如下:

        scrollViewTo(e){  
        let target = e.nativeEvent.target;  
        let scrollLength = 0;//初始值  
        if (target=== ReactNative.findNodeHandle(this.refs.hour)) {  
          scrollLength = 216;  
        }  
        this.refs.scroll.scrollTo({y:scrollLength,x:0});  
    

    需要注意的点:
    1、滚动的高度需要根据你的使用场景确认
    2、最好由Native给RN动态的计算出虚拟键盘的高度

    好了,用上述方案,基本可以解决虚拟键盘覆盖表单的问题。

    相关文章

      网友评论

          本文标题:处理react native TextInput键盘遮挡问题

          本文链接:https://www.haomeiwen.com/subject/uxeonttx.html