如何使用Nativescript(IOS)

时间:2016-05-23 14:14:15

标签: ios nativescript

我需要模仿基于Web /浏览器的功能,其中模糊事件用于触发一些事后输入字段处理。

但是使用带有Nativescript的TextField我只有" returnPress" event(据我所知,从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();
    }
}

看起来这应该是触发模糊事件的地方,但也许还有其他方法可以实现我所需要的而不会弄乱框架代码。

1 个答案:

答案 0 :(得分:0)

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

主page.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>

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