当文本在 TextInput 中时如何禁用 react-native AutoCorrect?
How to disable react-native AutoCorrect while text is inside TextInput?
我想要自动更正。但是,当用户键入“@”时,我希望自动更正功能关闭 ,直到出现其他情况。
我试过将道具设置为 false/true。但是,组件不会更改设置(当 TextInput 中有文本时)。
我该如何解决这个问题?
(仅iOS)
演示
代码
检查测试函数
请参阅代码注释了解最重要的说明。
checkText(text){
//create a new regular expression
const regex = new RegExp("@");
//check if the string contains an @
const res = text.match(regex);
// if res is not null, we have a match!
if (res != null){
if (this.state.autoCorrect){
// disable auto correction if it's still enabled
this.input.blur();
// hacky part, we need to dismiss the keyboard first, then we can show it again.
this.setState({autoCorrect: false}, () => {
setTimeout(() => this.input.focus(), 60);
});
}
}else{
if (!this.state.autoCorrect){
this.input.blur();
// enable auto correction if no @ is detected anymore
this.setState({autoCorrect: true}, () => {
setTimeout(() => this.input.focus(), 60);
});
}
}
//update text in state
this.setState({ username: text});
}
渲染函数
<View style={styles.container}>
<TextInput
value={this.state.username}
onChangeText={text => this.checkText(text)}
autoCorrect={this.state.autoCorrect}
/>
</View>
完整的工作示例
https://snack.expo.io/Skta6BJ34
讨论
看来,您需要 "reload" 键盘来影响自动更正的重新加载 属性。我认为这仍然是一个错误,希望在未来的版本中得到解决。 (见此 github issue)。
与此同时,您可以使用这个小解决方法,也许可以对 timings/regex 等进行一些微调。
编辑:
我找到了一个广泛的答案 here,这个答案以类似的方式解决了这个问题。
我想要自动更正。但是,当用户键入“@”时,我希望自动更正功能关闭 ,直到出现其他情况。
我试过将道具设置为 false/true。但是,组件不会更改设置(当 TextInput 中有文本时)。
我该如何解决这个问题?
(仅iOS)
演示
代码
检查测试函数
请参阅代码注释了解最重要的说明。
checkText(text){
//create a new regular expression
const regex = new RegExp("@");
//check if the string contains an @
const res = text.match(regex);
// if res is not null, we have a match!
if (res != null){
if (this.state.autoCorrect){
// disable auto correction if it's still enabled
this.input.blur();
// hacky part, we need to dismiss the keyboard first, then we can show it again.
this.setState({autoCorrect: false}, () => {
setTimeout(() => this.input.focus(), 60);
});
}
}else{
if (!this.state.autoCorrect){
this.input.blur();
// enable auto correction if no @ is detected anymore
this.setState({autoCorrect: true}, () => {
setTimeout(() => this.input.focus(), 60);
});
}
}
//update text in state
this.setState({ username: text});
}
渲染函数
<View style={styles.container}>
<TextInput
value={this.state.username}
onChangeText={text => this.checkText(text)}
autoCorrect={this.state.autoCorrect}
/>
</View>
完整的工作示例
https://snack.expo.io/Skta6BJ34
讨论
看来,您需要 "reload" 键盘来影响自动更正的重新加载 属性。我认为这仍然是一个错误,希望在未来的版本中得到解决。 (见此 github issue)。
与此同时,您可以使用这个小解决方法,也许可以对 timings/regex 等进行一些微调。
编辑:
我找到了一个广泛的答案 here,这个答案以类似的方式解决了这个问题。