Фокус конкретного элемента с учетом его ключа

1

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

Для этого я создаю один TextInput для каждого символа, тогда я устанавливаю первый TextInput с autofocus=true.

Мне нужно то, что когда пользователь вводит символ в текущем TextInput фокус переходит к следующему.

Чтобы создать Входы, я назначаю последовательное целое каждому ключу и передавая этот ключ функции handleKeyPress. То, что мне нужно внутри этой функции, - это то, что фокусирует TextInput с ключом, равным я + 1.

Мой код:

handleKeyPress(i, input_text) {
    // Here I need to focus the TextInput with key===(i+1)
    const text = this.state.text;
    text[i] = input_text;
    this.setState({
      text: text,
    });
}

render() {
    let ToRender = [];
    let n= 5;  // number of characters

    // First Input has autofocus set to true
    ToRender.push(
      <TextInput
        key={0}
        size="1"
        autofocus={true}
        value={this.state.text[0]}
        onChangeText={(text) => this.handleKeyPress(0, text)}
      />
    );

    // generate the rest of the Inputs
    for (let i=1; i<n; i++) {
      ToRender.push(
        <TextInput
          key={i}
          size="1"
          value={this.state.text[i]}
          onChangeText={(text) => this.handleKeyPress(i, text)}
        />
      );
    }

    return(
      <View style={styles.container}>
        {ToRender.map((e) => e)}
      </View>
    );
}

Как я могу сфокусировать определенный элемент, учитывая его ключ?

Теги:
react-native
textinput

1 ответ

0
Лучший ответ

Хорошо, мне удалось это решить.

Во-первых, я должен ссылаться на элементы с помощью поля ref вместо key и обращаться к ним с помощью this.refs[i].focus() чтобы сфокусировать i-й элемент:

<TextInput
    key={i}
    ref={i}
    size="1"
    autofocus={true}
    value={this.state.text[i]}
    onChangeText={(text) => this.handleKeyPress(i, text)}
/>

Тогда внутри функции handleKeyPress я могу сделать:

handleKeyPress(i, input_text) {
    this.refs[i+1].focus();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню