feat(core): setSelection method for editable text components (#9175)

This commit is contained in:
Martin Guillon
2021-01-29 00:32:22 +01:00
committed by GitHub
parent 0928c4d030
commit 58b2542997
4 changed files with 34 additions and 0 deletions

View File

@ -23,6 +23,7 @@ export abstract class EditableTextBase extends TextBase implements EditableTextB
public abstract dismissSoftInput();
public abstract _setInputType(inputType: number): void;
public abstract setSelection(start: number, stop?: number);
private _focusHandler = () => this._goToVisualState('focus');
private _blurHandler = () => this._goToVisualState('blur');

View File

@ -144,6 +144,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
/* tslint:enable */
nativeViewProtected: android.widget.EditText;
nativeTextViewProtected: android.widget.EditText;
private _keyListenerCache: android.text.method.KeyListener;
private _inputType: number;
@ -466,4 +467,15 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
this.nativeTextViewProtected.setFilters(newFilters);
}
}
public setSelection(start: number, stop?: number) {
const view = this.nativeTextViewProtected;
if (view) {
if (stop !== undefined) {
view.setSelection(start, stop);
} else {
view.setSelection(start);
}
}
}
}

View File

@ -64,6 +64,11 @@ export class EditableTextBase extends TextBase {
*/
public _setInputType(inputType: number): void;
//@endprivate
/**
* Set the selection anchor to start and the selection edge to stop
*/
public setSelection(start: number, stop?: number);
}
export type ReturnKeyType = 'done' | 'next' | 'go' | 'search' | 'send';

View File

@ -5,6 +5,7 @@ export * from './editable-text-base-common';
export abstract class EditableTextBase extends EditableTextBaseCommon {
public nativeViewProtected: UITextField | UITextView;
public readonly nativeTextViewProtected: UITextField | UITextView;
public dismissSoftInput() {
this.nativeTextViewProtected.resignFirstResponder();
this.notify({ eventName: EditableTextBase.blurEvent, object: this });
@ -189,6 +190,21 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
this.nativeTextViewProtected.autocorrectionType = newValue;
}
public setSelection(start: number, stop?: number) {
const view = this.nativeTextViewProtected;
if (view) {
if (stop !== undefined) {
const begin = view.beginningOfDocument;
const fromPosition = view.positionFromPositionOffset(begin, start);
const toPosition = view.positionFromPositionOffset(begin, stop);
view.selectedTextRange = view.textRangeFromPositionToPosition(fromPosition, toPosition);
} else {
const begin = view.beginningOfDocument;
const pos = view.positionFromPositionOffset(begin, start);
view.selectedTextRange = view.textRangeFromPositionToPosition(pos, pos);
}
}
}
}
export function _updateCharactersInRangeReplacementString(formattedText: FormattedString, rangeLocation: number, rangeLength: number, replacementString: string): void {