我正在尝试创建信用卡输入文本字段。目标是在每个第4,第8和第12个字符后包含空格。
在添加空格后,光标应保留在textInput的末尾
在Windows平台上,光标不会在textInput的末尾继续,而是在空格后面并输入最后一个数字。
为了更清楚,我有一个小的回购再现了这里可以找到的问题 https://github.com/meddyrainzo/maskedTextInput/tree/master
import valid from 'card-validator';
渲染方法
render() {
const { creditCardNumber } = this.state;
const { container } = styles;
return (
<View style={container}>
<TextInput
placeholder='Enter text'
value={creditCardNumber}
onChangeText={inputValue => this.onChangeTextHandler(inputValue)}
/>
</View>
);
}
onChangeTextHandler方法
onChangeTextHandler = (textInput) => {
const card = valid.number(textInput).card || fallbackCard;
const maxCardLength = card.lengths[card.lengths.length -1];
const onlyNumericValues = this.removeNonNumber(textInput);
const cardNumberWithoutGaps = onlyNumericValues.substr(0, maxCardLength);
const creditCardNumber = this.addGaps(cardNumberWithoutGaps);
this.setState({creditCardNumber});
}
removeNonNumber方法
removeNonNumber = (string = '') => string.replace(/[^\d]/g, '');
addGaps = (str) => {
const gaps = [0, 4, 8, 12];
const offsets = (gaps).concat([str.length]);
return offsets.map((end, index) => {
if (index === 0) return '';
const start = offsets[index - 1];
return str.substr(start, end - start);
}).filter(part => part !== '').join(' ');
};
上面的所有代码块都在repo链接的App.js文件中。我仍然会建议克隆repo,这样你就可以手动测试并看看iOS和Android与Windows(对于那些感兴趣的人)的结果有何不同。
所以我的主要问题是,有没有人知道如何将光标移动到Windows上textInput的末尾?我知道react-native为textInput添加了一个名为&#34; selection&#34;您可以使用它来控制游标的开始和结束位置,但是检查窗口的反应本机代码,但它似乎不是选择道具的实现。
使用的版本:react-native:0.49.3