文本字段上的 Nativescript textFieldDidEndEditing 委托

Nativescript textFieldDidEndEditing delegate on textfiels

UITextFieldDelegateImpl.prototype.textFieldDidEndEditing = function (textField) {
    var owner = this._owner.get();
    if (owner) {
        if (owner.updateTextTrigger === enums_1.UpdateTextTrigger.focusLost) {
            owner._onPropertyChangedFromNative(text_base_1.TextBase.textProperty, textField.text);
        }
        owner.dismissSoftInput();
        if (owner.formattedText) {
            owner.formattedText.createFormattedStringCore();
        }
    }
};

上面的核心方法在文本域输入结束时被调用,我尝试用

覆盖我页面上的方法
TextField._delegate.textFieldDidEndEditing = function() {};
TextField.ios.delegate.textFieldDidEndEditing = function() {};

但没有锻炼。

注意:我正在寻找替代解决方案来获取文本字段结束编辑事件(不是 属性 可观察到的更改)。

用法:文本字段值应介于 5 到 50 之间,如果不在该范围内,我必须显示一个弹出窗口并让用户从列表选择器中选择一个值。

在上述情况下,属性 更改锻炼,例如)如果用户想要输入 15,首先他们将输入 1,然后他们将输入 5,因此在上述情况下每次检查都无济于事。

我注意到您提到您想使用不同的方式来处理丢失的 textField 焦点。

然而,在 NativeScirpt 中,最好的方法是将 updateTextTrigger 设置为 focusLost 并处理 TextField 属性Change。我附上示例代码:

xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="navigatingTo">
    <StackLayout class="p-20">
       <TextField hint="Field 1" updateTextTrigger="focusLost" id="tx" />
       <TextField hint="Field 2"  />
    </StackLayout>
</Page>

typescript

import { EventData, PropertyChangeData } from 'data/observable';
import { Page } from 'ui/page';
import { HelloWorldModel } from './main-view-model';
import {Observable} from "data/observable";
import {TextField} from "ui/text-field";

export function navigatingTo(args: EventData) {
    /*
    This gets a reference this page's <Page> UI component. You can
    view the API reference of the Page to see what's available at
    https://docs.nativescript.org/api-reference/classes/_ui_page_.page.html
    */
    let page = <Page>args.object;
    var textfield:TextField = <TextField>page.getViewById("tx");
    textfield.on("propertyChange", ((args: PropertyChangeData) => {
        var tField:TextField = <TextField>args.object;
        console.log(tField.text);
    }));
}

关于主题,您能否提供更多信息来满足需要另一种方法来处理 textField 焦点丢失,而不是使用可观察到的 属性 更改。