处理textinput游标放置react-native窗口

时间:2017-11-14 09:45:28

标签: react-native uwp react-native-windows

故事:

我正在尝试创建信用卡输入文本字段。目标是在每个第4,第8和第12个字符后包含空格。

预期结果:

在添加空格后,光标应保留在textInput的末尾

实际结果:

在Windows平台上,光标不会在textInput的末尾继续,而是在空格后面并输入最后一个数字。

PS。

为了更清楚,我有一个小的回购再现了这里可以找到的问题 https://github.com/meddyrainzo/maskedTextInput/tree/master

来自repo的相关代码块

使用的进口(除了通常的反应和反应原生的东西)
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方法是添加空格的地方

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

0 个答案:

没有答案