文本字段上的 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 焦点丢失,而不是使用可观察到的 属性 更改。
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 焦点丢失,而不是使用可观察到的 属性 更改。