Как отключить встроенную автозамену, когда текст находится внутри TextInput? - PullRequest
2 голосов
/ 05 мая 2019

Я хочу автозамену.Однако, когда пользователь вводит «@», я хочу, чтобы автозамена отключала , отключая до тех пор, пока не произойдет иное.

Я попытался установить для проповеди значение false / true.Однако компонент не меняет настройки (хотя в TextInput есть текст).

Как обойти это?

(только для iOS)

1 Ответ

7 голосов
/ 07 мая 2019

Демонстрация

demo gifdemo2

код

функция checkTest

См. Комментарии к коду для наиболее важных замечаний.

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

Обсуждение

Кажется, вам нужно "перезагрузить" клавиатуру, чтобы повлиять на перезагрузку свойства autoCorrect. Я думаю, что это все еще ошибка и, надеюсь, будет исправлена ​​в следующем выпуске. (см. эту проблему github ).

В то же время, вы можете использовать этот небольшой обходной путь и, возможно, сделать некоторые точные настройки времени / регулярных выражений и т. Д.

Редактировать:

Я нашел подробный ответ здесь , этот же вопрос решает аналогичным образом.

...