textfiels上的Nativescript textFieldDidEndEditing委托

时间:2017-02-02 06:38:13

标签: ios uitextfield nativescript

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() {};

但它没有锻炼。

注意:我正在寻找另一种解决方案来获取文本字段结束编辑事件(而不是使用observable进行属性更改)。

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

在上述情况下,属性更改锻炼例如)如果用户想要输入15,首先他们将输入1,然后他们将输入5,所以每次检查都不会在上述情况下帮助。

1 个答案:

答案 0 :(得分:2)

我注意到你提到过你想用另一种方法处理textField焦点丢失。

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

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焦点丢失的替代方法的需要,而不是使用可观察的属性更改。