Я разрабатываю небольшое приложение, чтобы угадать слово. Вместо одного 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>
);
}
Как я могу сфокусировать определенный элемент, учитывая его ключ?
Хорошо, мне удалось это решить.
Во-первых, я должен ссылаться на элементы с помощью поля 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();
}