将光标移到TextField的末尾-Nativescript

时间:2019-05-22 17:28:54

标签: android angular user-interface nativescript textfield

我希望文本框在用户单击后自动指向文本的结尾。这在使用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)
}

如果我将它包装在一个超时中,它可以工作,但是在光标移动之前会闪烁,这让我不太满意。我还做了一个playground example

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

它似乎按预期工作。请记住,在Android上的焦点是将光标放在TextField上。如果按后退按钮隐藏键盘,然后在TextField上单击任意位置以再次显示键盘,则不会再次触发焦点事件。

当我点击TextField时,它将光标指向TextField的末尾,如果再次点击同一TextField则不会。但是,如果我点击第二个TextField,那么它将在那里按预期工作,因为焦点现在从第一个TextField转移到了第二个。

如果仍然有问题,请共享设备的操作系统版本,以及可能显示问题的GIF。

答案 1 :(得分:0)

好的,我找到了解决方案。这有点骇人听闻,但对我有用。与setTimeout的主要区别在于,它不会在移动光标之前“闪烁”。

好吧,所以我的解决方案是:我在文本字段内使用条件CSS类,具体取决于文本字段是否聚焦。一旦文本字段准备就绪,这将导致生命周期挂钩再运行一次(至少我认为这是正在发生的事情。)

这是我的代码: HTML:

#checkout-menu-icon sub {
   vertical-align: middle;
}

CSS:

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

}

TS:

.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;

这是我的updated playground example