【问题标题】:Can Nativescript Angular intercept text change event before it happen?Nativescript Angular 可以在文本更改事件发生之前拦截它吗?
【发布时间】:2018-07-24 18:40:31
【问题描述】:

我有 TextField 使用 Angular nativescript。

<TextField   (textChange)="onTextChange($event)" ></TextField>

我只想允许将“a”字符插入到该 TextField 中。
应该阻止所有其他字符(“b”、“c”、....) - 意思是 - 阻止插入。

我已经知道我可以使用 (textChange) 事件然后删除字符 - 但这是一个为时已晚的事件

问题:

假设我有一个文本字段,我如何跨平台防止某些字符被输入?

【问题讨论】:

    标签: angular nativescript angular2-nativescript


    【解决方案1】:

    对于 Android,您可以通过显式设置 setKeyListener 的允许实例来实现 android.widget.Edittext(这是 NativeScript 中 TextField 后面的原生 Android 控件)

    例子

    export function onTfLoaded(args) {
        let tf = <TextField>args.object;
    
        let nativeTF;
    
        if (isAndroid) {
            let nativeTF = <android.widget.EditText>tf.nativeView; // on Android is android.widget.EditText
            nativeTF.setKeyListener(android.text.method.DigitsKeyListener.getInstance("zxc"));
        } else {
            let nativeTF = <UITextField>tf.nativeView;// for iOS is UITextField
        }
    
    }
    

    上面是只允许用户输入ZXC(同as setting digits),但是,解决方案仍然会提示数字键盘。

    【讨论】:

    • 谢谢尼克。我希望 NS 有(onKeyDown),它将有ee.cancel....
    • 您可以直接访问本机控件(EditText 和 UITextField)并使用提供的事件 - 例如beforeTextChange EditText 上的事件就像在这里完成 github.com/telerik/nativescript-ui-feedback/issues/… .. 对于 iOS 我不确定是否有类似的事件,但如果有,您可以覆盖委托方法并使用它
    • 我在这方面浪费了一些时间,因为我不知道 keyboardType 会搞砸这个。例如,我添加了“,”作为数字之一,但没有被接受,因为我有 keyboard="number"
    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多