Ответ 1
Клавиатура должна открываться автоматически при фокусировке <TextField/>
. Вы можете использовать autoFocus
чтобы фокусировать ее, когда элемент монтируется (ссылка)
У меня есть экран в приложении React Native, в котором у меня мало текстовых полей.
Мне было интересно, есть ли способ, при котором на экране загружается мое ключевое слово автоматически и фокусируется на моем первом поле ввода текста?
Я искал что-то вроде stateAlwaysVisible
в android.
Клавиатура должна открываться автоматически при фокусировке <TextField/>
. Вы можете использовать autoFocus
чтобы фокусировать ее, когда элемент монтируется (ссылка)
@Ziarno прав, но, Аппаратное обеспечение → Клавиатура → Переключить программную клавиатуру
Выбранное решение не работает для меня из-за стековой навигации (см. Комментарий "SoundStage" для выбранного решения)
Я добавил новую переменную openTheKeyboard
в состояние, изначально установленное в false
.
Мое хакерское решение:
componentDidMount() {
this.setState({ openTheKeyboard: true });
}
componentDidUpdate() {
if (this.state.openTheKeyboard) {
this.textInput.focus();
this.setState({ openTheKeyboard: false });
}
}
Мой путь (возникла проблема с фокусировкой и отображением клавиатуры на компонентном рендере)
import { InteractionManager, TextInput } from 'react-native';
...
inputRef = React.createRef();
componentDidMount() {
this.focusInputWithKeyboard()
}
focusInputWithKeyboard() {
InteractionManager.runAfterInteractions(() => {
this.inputRef.current.focus()
});
}
render() {
<TextInput ref={this.inputRef} />
}
Кажется, это работает в моем симуляторе. Не подтверждено на реальном устройстве.
constructor(props) {
super(props);
this.buildNameTextInput = React.createRef();
}
<TouchableOpacity
style={styles.mainButton}
onPress={() => {
this.buildNameTextInput = true
this.props.setSaveBuildModal(true)
}}
>
<Text style={styles.mainButtonText}> Save Build </Text>
</TouchableOpacity>
<TextInput
autoFocus={!!this.buildNameTextInput}
ref={this.buildNameTextInput}
placeholder="Type a Name"
autoCapitalize="words"
style={{...styles.heroBtnText, marginVertical: 50}}
onChangeText={buildName => this.props.setCurrentBuildName(buildName)}
value={this.props.buildName}
/>