Переместить курсор в конец TextField - Nativescript - PullRequest
0 голосов
/ 22 мая 2019

Я хочу, чтобы текстовое поле автоматически указывало на конец текста, когда пользователь нажимает на него.Раньше это работало с setSelection, но по какой-то причине перестало работать.Теперь курсор указывает на то, куда пользователь щелкает.

HMTL:

<TextField text="the cursor should point at the end when clicked" (focus)="onFocus($event.object)"> </TextField>

TS:

public onFocus(textfield): void {
   textfield.android.setSelection(textfield.text.length)
}

Если я обертываю его внутри тайм-аута, это работает, но этомигает перед перемещением курсора, что меня не очень устраивает.Я также сделал пример детской площадки

Заранее спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Хорошо, я нашел решение для этого. Это немного взломать, но это помогает мне. Основное отличие от setTimeout в том, что он не мигает перед перемещением курсора.

Итак, мое решение: я использую условный класс css внутри текстового поля в зависимости от того, фокусируется ли текстовое поле или нет. Это заставляет хуки жизненного цикла запускаться еще раз, как только текстовое поле готово (по крайней мере, я так думаю).

Вот мой код сейчас: HTML:

<TextField [class.default-padding]="isFocused" text="the cursor should point at the end when clicked" (focus)="onFocus($event.object)" (blur)="onBlur()"> </TextField>

CSS:

.default-padding {
/* This is just a dummy value. You can use any other padding or margin or
 anything that will cause the hooks to re-render*/
padding-right: 0;

}

TS:

private isFocused = false

public onFocus(textfield): void {
    this.isFocused = true
    textfield.android.setSelection(textfield.text.length)
}

public onBlur(): void {
    this.isFocused = false
}

Вот мой обновленный пример игровой площадки

0 голосов
/ 22 мая 2019

Кажется, работает как ожидалось.Помните, что в Android фокус находится, когда курсор находится на TextFieldЕсли нажать кнопку «Назад», чтобы скрыть клавиатуру, и щелкнуть в любом месте TextField, чтобы снова отобразить клавиатуру, это не вызовет события фокуса снова.

При наведении курсора на TextField курсор будет указывать на конец, но не будет, если янажмите на тот же TextField снова.Но если я коснусь второго TextField, то оно должно работать там, как и ожидалось, поскольку фокус теперь смещается с первого TextField на второе.

Если у вас все еще есть проблемы, пожалуйста, поделитесь версией ОС вашего устройства и, возможно, GIF, который показываетвопрос.

...