Прямо сейчас, в моем собственном приложении, я не могу изменить промежуточное значение для каждого входа. Потому что каждый раз, когда я нажимаю на ввод текста, каретка находится в конце вставленной строки.
Например:
Значение: 123456 ----> Я хочу удалить / изменить только 23, но не могу, потому что каретка превышает последнее значение.
я пытался использовать selectTextOnFocus, но он срабатывает только при нажатии на другой ввод текста, и не работает, если данные предварительно заполнены. Я пытаюсь объяснить лучше
на изображении ниже, я перепрыгнул с первого текста Mobile Number
на второй id RICE
.
На изображении внизу я ввел новые значения 12321
, но если я нажму второй раз на тот же самый ввод, текст не будет быть выбранным. Я пытался щелкнуть и остаться в течение 10 секунд, но ничего.
Я использую xcode для сборки приложения.
это мой компонент ввода
const InputField: React.FC<Props> = (
{
placeholder,
iconLeft,
iconRight,
dateTimeIcon,
iconBackground,
type,
id,
style,
name,
value,
keyboardType,
iconRightFunction,
maxLength = 100,
inputBackground,
onChangeText,
onChange,
editable,
textAlign,
setMarginBottom,
onFocus,
multiline,
numberOfLines,
label,
error,
errorLabel,
containerHeight,
onBlur,
},
ref,
) => {
const [hidePassword, showOrHidePassword] = useState(true);
const _handleShowPassword = () => {
showOrHidePassword(!hidePassword);
};
const _handleOnChange = ({ nativeEvent }) => {
onChange && onChange(name, nativeEvent.text);
};
const _handleOnBlur = () => {
onBlur && onBlur(name, value);
};
const input = useRef(null);
const showPassword = type === 'password' && !error && value.length !== 0;
return (
<>
{label && (
<StyledLabelContainer setMargin={setMarginBottom}>
<StyledLabel error={error}>{label}</StyledLabel>
{error && <StyledLabel error={error}>{errorLabel}</StyledLabel>}
</StyledLabelContainer>
)}
<StyledContainer containerHeight={containerHeight} setMargin={setMarginBottom}>
{iconLeft && <StyledIconLeft bgColor={iconBackground}>{iconLeft}</StyledIconLeft>}
<TouchableOpacity
activeOpacity={0}
onPress={() => {
console.log('inputcurrent', input, input.current);
input.current.focus();
}}
style={{ flex: 1 }}
>
<View pointerEvents="none" style={{ flex: 1 }}>
<StyledInput
style={style}
ref={input}
textAlign={textAlign}
maxLength={maxLength}
editable
selectTextOnFocus
clearTextOnFocus={false}
secureTextEntry={type === 'password' && hidePassword}
placeholder={placeholder}
type={type}
autoCapitalize="none"
onChangeText={onChangeText}
onChange={_handleOnChange}
value={value}
id={id}
name={name}
bgColor={inputBackground}
keyboardType={keyboardType}
blurOnSubmit={true}
onFocus={onFocus}
returnKeyType={'done'}
onBlur={_handleOnBlur}
error={error}
multiline={multiline}
numberOfLines={numberOfLines}
/>
</View>
</TouchableOpacity>
Вопрос
Как установить правильную позицию курсора во время нажатия? Пример: 123456 ----> пользователь нажимает в середине строки, я ожидаю увидеть символ между цифрами 3 и 4.
Мои попытки
Я читал об отборе, но мне не удалось его реализовать, мы будем очень рады любым советам.
Спасибо за время.