#3614 Feature request: TextField maxLength property support.

- Implemented @PanayotCankov's review remarks.
This commit is contained in:
eddyverbruggen@gmail.com
2017-03-30 11:37:29 +02:00
committed by vakrilov
parent 0997d537d0
commit da6562b506
3 changed files with 13 additions and 23 deletions

View File

@@ -51,5 +51,5 @@ autocorrectProperty.register(EditableTextBase);
export const hintProperty = new Property<EditableTextBase, string>({ name: "hint", defaultValue: "" });
export const maxLengthProperty = new Property<EditableTextBase, number>({ name: "maxLength", defaultValue: -1 });
export const maxLengthProperty = new Property<EditableTextBase, number>({ name: "maxLength", defaultValue: Number.POSITIVE_INFINITY });
maxLengthProperty.register(EditableTextBase);

View File

@@ -1,5 +1,5 @@
import {
TextFieldBase, secureProperty, textProperty, hintProperty, colorProperty, placeholderColorProperty, maxLengthProperty,
TextFieldBase, secureProperty, textProperty, hintProperty, colorProperty, placeholderColorProperty,
Length, paddingTopProperty, paddingRightProperty, paddingBottomProperty, paddingLeftProperty, _updateCharactersInRangeReplacementString, Color, layout
} from "./text-field-common";
@@ -67,8 +67,11 @@ class UITextFieldDelegateImpl extends NSObject implements UITextFieldDelegate {
public textFieldShouldChangeCharactersInRangeReplacementString(textField: UITextField, range: NSRange, replacementString: string): boolean {
const owner = this._owner.get();
if (owner) {
if (owner.maxLength > -1 && owner.maxLength <= textField.text.length && replacementString.length > range.length) {
return false;
const delta = replacementString.length - range.length;
if (delta > 0) {
if (textField.text.length + delta > owner.maxLength) {
return false;
}
}
if (owner.updateTextTrigger === "textChanged") {
@@ -132,7 +135,6 @@ class UITextFieldImpl extends UITextField {
export class TextField extends TextFieldBase {
private _ios: UITextField;
private _delegate: UITextFieldDelegateImpl;
private _maxLength: number = -1;
nativeView: UITextField;
constructor() {
@@ -239,11 +241,4 @@ export class TextField extends TextFieldBase {
[paddingLeftProperty.setNative](value: Length) {
// Padding is realized via UITextFieldImpl.textRectForBounds method
}
[maxLengthProperty.getDefault](): number {
return this._maxLength;
}
[maxLengthProperty.setNative](value: number) {
this._maxLength = +value;
}
}

View File

@@ -2,7 +2,7 @@
import {
EditableTextBase, editableProperty, hintProperty, textProperty, colorProperty, placeholderColorProperty,
borderTopWidthProperty, borderRightWidthProperty, borderBottomWidthProperty, borderLeftWidthProperty,
paddingTopProperty, paddingRightProperty, paddingBottomProperty, paddingLeftProperty, maxLengthProperty,
paddingTopProperty, paddingRightProperty, paddingBottomProperty, paddingLeftProperty,
Length, _updateCharactersInRangeReplacementString, Color, layout
} from "../editable-text-base";
@@ -52,8 +52,11 @@ class UITextViewDelegateImpl extends NSObject implements UITextViewDelegate {
public textViewShouldChangeTextInRangeReplacementText(textView: UITextView, range: NSRange, replacementString: string): boolean {
const owner = this._owner.get();
if (owner) {
if (owner.maxLength > -1 && owner.maxLength <= textView.text.length && replacementString.length > range.length) {
return false;
const delta = replacementString.length - range.length;
if (delta > 0) {
if (textView.text.length + delta > owner.maxLength) {
return false;
}
}
if (owner.formattedText) {
@@ -69,7 +72,6 @@ export class TextView extends EditableTextBase implements TextViewDefinition {
private _ios: UITextView;
private _delegate: UITextViewDelegateImpl;
private _isShowingHint: boolean;
private _maxLength: number = -1;
constructor() {
super();
@@ -275,13 +277,6 @@ export class TextView extends EditableTextBase implements TextViewDefinition {
let left = layout.toDeviceIndependentPixels(this.effectivePaddingLeft + this.effectiveBorderLeftWidth);
this.nativeView.textContainerInset = { top: inset.top, left: left, bottom: inset.bottom, right: inset.right };
}
[maxLengthProperty.getDefault](): number {
return this._maxLength;
}
[maxLengthProperty.setNative](value: number) {
this._maxLength = +value;
}
}
// TextView.prototype.recycleNativeView = true;