Skip to content

Commit 58b2542

Browse files
authored
feat(core): setSelection method for editable text components (NativeScript#9175)
1 parent 0928c4d commit 58b2542

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

packages/core/ui/editable-text-base/editable-text-base-common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export abstract class EditableTextBase extends TextBase implements EditableTextB
2323

2424
public abstract dismissSoftInput();
2525
public abstract _setInputType(inputType: number): void;
26+
public abstract setSelection(start: number, stop?: number);
2627

2728
private _focusHandler = () => this._goToVisualState('focus');
2829
private _blurHandler = () => this._goToVisualState('blur');

packages/core/ui/editable-text-base/index.android.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
144144
/* tslint:enable */
145145

146146
nativeViewProtected: android.widget.EditText;
147+
nativeTextViewProtected: android.widget.EditText;
147148
private _keyListenerCache: android.text.method.KeyListener;
148149
private _inputType: number;
149150

@@ -466,4 +467,15 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
466467
this.nativeTextViewProtected.setFilters(newFilters);
467468
}
468469
}
470+
471+
public setSelection(start: number, stop?: number) {
472+
const view = this.nativeTextViewProtected;
473+
if (view) {
474+
if (stop !== undefined) {
475+
view.setSelection(start, stop);
476+
} else {
477+
view.setSelection(start);
478+
}
479+
}
480+
}
469481
}

packages/core/ui/editable-text-base/index.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ export class EditableTextBase extends TextBase {
6464
*/
6565
public _setInputType(inputType: number): void;
6666
//@endprivate
67+
68+
/**
69+
* Set the selection anchor to start and the selection edge to stop
70+
*/
71+
public setSelection(start: number, stop?: number);
6772
}
6873

6974
export type ReturnKeyType = 'done' | 'next' | 'go' | 'search' | 'send';

packages/core/ui/editable-text-base/index.ios.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export * from './editable-text-base-common';
55

66
export abstract class EditableTextBase extends EditableTextBaseCommon {
77
public nativeViewProtected: UITextField | UITextView;
8+
public readonly nativeTextViewProtected: UITextField | UITextView;
89
public dismissSoftInput() {
910
this.nativeTextViewProtected.resignFirstResponder();
1011
this.notify({ eventName: EditableTextBase.blurEvent, object: this });
@@ -189,6 +190,21 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
189190

190191
this.nativeTextViewProtected.autocorrectionType = newValue;
191192
}
193+
public setSelection(start: number, stop?: number) {
194+
const view = this.nativeTextViewProtected;
195+
if (view) {
196+
if (stop !== undefined) {
197+
const begin = view.beginningOfDocument;
198+
const fromPosition = view.positionFromPositionOffset(begin, start);
199+
const toPosition = view.positionFromPositionOffset(begin, stop);
200+
view.selectedTextRange = view.textRangeFromPositionToPosition(fromPosition, toPosition);
201+
} else {
202+
const begin = view.beginningOfDocument;
203+
const pos = view.positionFromPositionOffset(begin, start);
204+
view.selectedTextRange = view.textRangeFromPositionToPosition(pos, pos);
205+
}
206+
}
207+
}
192208
}
193209

194210
export function _updateCharactersInRangeReplacementString(formattedText: FormattedString, rangeLocation: number, rangeLength: number, replacementString: string): void {

0 commit comments

Comments
 (0)