Я пытаюсь отключить вырезание, копирование, вставку и выбор всех действий из мобильного приложения NativeScript + Angular (для iOS и Android)
<TextField class="m-5 input input-border" disableCutCopyPaste> </TextField>
Поэтому я создал директиву, которая отлично работает на StockУстройства с ОС Android, но на пользовательских устройствах с ОС Android пользователи могут выполнять операции вырезания, копирования, вставки, дважды нажав на текст, введенный в текстовое поле
. Чтобы отключить двойное нажатие, я добавил следующую строку кода
textField.nativeView.setOnTouchListener(false);
в созданной мной директиве (приведенной ниже)
import { Directive, OnInit, OnDestroy, ElementRef, Renderer2 } from "@angular/core";
import { isIOS } from "tns-core-modules/platform";
import { layout } from "tns-core-modules/utils/utils";
import { EventData } from "tns-core-modules/data/observable";
import { TextField } from "tns-core-modules/ui/text-field";
declare var UITextField, CGRectMake;
if (isIOS) {
UITextField.prototype._originalCanPerformActionWithSender = UITextField.prototype.canPerformActionWithSender;
UITextField.prototype.canPerformActionWithSender = function (action, sender) {
if (this.disableMenu) {
return false;
}
return UITextField.prototype._originalCanPerformActionWithSender.call(this, action, sender)
};
}
@Directive({
selector: "[disableCutCopyPaste]"
})
export class DisableCutCopyPasteDirective implements OnInit, OnDestroy {
listener: () => void;
constructor(private renderer: Renderer2, private el: ElementRef) {
}
ngOnInit() {
this.listener = this.renderer.listen(this.el.nativeElement, TextField.loadedEvent, (event: EventData) => {
const textField = <TextField>event.object;
if (isIOS) {
Object.defineProperty(textField.nativeView, "disableMenu", {
get: function () {
return true;
}
});
} else {
textField.nativeView.setLongClickable(false);
textField.nativeView.setOnTouchListener(false);
}
});
}
ngOnDestroy() {
this.removeListener();
}
private removeListener() {
if (this.listener) {
this.listener();
this.listener = null;
}
}
}
Не работает, и я получаю следующую ошибку
System.err: Error: Cannot convert boolean to Landroid/view/View$OnTouchListener; at index 0
Я довольноновичок в NativeSCript с Angular. Так что любая помощь будет оценена.
Playground link