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,所以每次检查都不会在上述情况下帮助。
答案 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焦点丢失的替代方法的需要,而不是使用可观察的属性更改。