【问题标题】:How to get a blur event with Nativescript (IOS)如何使用 Nativescript (IOS) 获取模糊事件
【发布时间】:2016-05-25 23:52:29
【问题描述】:

我需要模拟一个基于网络/浏览器的功能,其中使用模糊事件来触发一些后期输入字段处理。

但是,使用带有 Nativescript 的 TextField 我只有“returnPress”事件(据我从 UITextFieldDelegateImpl 类源中可以看到)。此活动有效,但不是我需要的。

其中有一些有趣的代码,尤其是 textFieldDidEndEditing 方法:

    public textFieldDidEndEditing(textField: UITextField) {
    let owner = this._owner.get();
    if (owner) {
        if (owner.updateTextTrigger === UpdateTextTrigger.focusLost) {
            owner._onPropertyChangedFromNative(TextBase.textProperty, textField.text);
        }

        owner.dismissSoftInput();
    }
}

看起来这应该是触发模糊事件的地方,但也许还有其他方法可以在不弄乱框架代码的情况下完成我需要的事情。

【问题讨论】:

    标签: ios nativescript


    【解决方案1】:

    我做了一些研究,发现您可以使用Observable.propertyChangeEventGestureModule。下一个代码 sn-ps 展示了上述方法。

    主页.xml

    <Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo" loaded="loaded">
      <StackLayout id="stack">
      <Label text="Test" textWrap="true" id="label"/>
    
         <TextField  returnKeyType="done" updateTextTrigger="focusLost"  hint="text" id="textfield" text="{{ textfield }}"  autocorrect="false" autocapitalizationType="none" />
         <TextField hint="test2" text="{{  }}" id="textfield2"/>
    
      </StackLayout>
    </Page>
    

    main-page.js

    var observable_1 = require("data/observable"); 
    var gestures_1 = require('ui/gestures'); 
    var textFieldEmail;
    
    function loaded(args) {
        var page = args.object;
        var textField = page.getViewById("textfield");
        var stackLayout = page.getViewById("stack");
        var observable = new observable_1.Observable();
        observable.addEventListener(observable_1.Observable.propertyChangeEvent, function (pcd) {
            console.log(pcd.eventName.toString() + " " + pcd.propertyName.toString() + " " + pcd.value.toString());
        });
        stackLayout.on(gestures_1.GestureTypes.tap, function (args) {
            console.log("Tap");
            if (page.ios) {
                textField.ios.resignFirstResponder();
            }
            else {
                textField.android.clearFocus();
            }
        });
        page.bindingContext = observable;
    }
    exports.loaded = loaded;
    

    【讨论】:

    • 我花了一些时间才弄清楚你在做什么,因为我更习惯于 TS 语法,但我觉得这至少让我有办法知道哪个字段是活动的(或已激活)并为我提供了一种对此进行编码的方法。我会试一试。不像模糊事件那么简单,但现在我认为没有比这更好的了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多