Bug情况描述:React Native项目中,点击按钮A出现弹框浮层,弹框中需要TextInput输入数字,键盘浮起来;这时候点击 取消按钮L 或者 确定按钮R,只是让键盘收起,但是并没有触发 取消 或 确定 的事件,必须要再点击第二次才可以触发。另外,当输入框有焦点的情况下,点击 屏幕任意位置(除了键盘),可使键盘收起隐藏;
期待效果:当输入框输完内容后,光标焦点仍然存在,键盘也未消失,这时候点击一次取消按钮L即可让弹框层和键盘同时隐藏;点击一次确定按钮R内容即可显示到对应位置。
解决方案:
利用ScrollView标签的keyboardShouldPersistTaps={'always'}
即可解决,
查看TextInput
是否包裹在ScrollView
标签中,是则添加keyboardShouldPersistTaps
<ScrollView keyboardShouldPersistTaps={'always'}>
<Block style={styles.interval}>
<ListItem title='头像'/>
<ListItem title='昵称'
tip={this.state.nickname}
onPress={() => this.refs.alert && this.refs.alert._showModal()}
/>
<CustomAlert ref='alert'
confirmClick={() => this._confirmValue('nickname', this.state.tempNickname)}
cancelClick={() => this._cancelValue('nickname', this.state.nickname)}>
<TextInput style={styles.inputStyle} autoFocus
onChangeText={text => this._handleChangeText('tempNickname', text)}
value={this.state.tempNickname}
/>
</CustomAlert>
</Block>
</ScrollView>