Esta pagina se ve mejor con JavaScript habilitado

How to: Eliminar opciones de copiar/pegar en UITextField [Xamarin.iOS]

 ·  ☕ 2 minutos lectura  ·  ✍️ Saturnino Pimentel

¡Hola de nuevo!

En algunos casos nos resultará necesario deshabilitar las opciones de copiar y pegar de controles de texto (UITextField) en iOS, para realizar esto se deben seguir los siguientes pasos.

1.- Crear una clase que herede de UITextField.

[Register(nameof(MyCustomTextField))]
public class CustomTextField : UITextField

Es este paso debemos recordar registrar nuestra clase utilizando el atributo Register.

2.-Sobrescribir el método CanPerform
Se necesita sobrescribir este método y regresar false para indicar que esa opción no está disponible en el control tal como se muestra en el siguiente código para las demás opciones puedes retornar la implementación base del método.

public override bool CanPerform(ObjCRuntime.Selector action, Foundation.NSObject withSender)
        {
            if (action == new ObjCRuntime.Selector("paste:") || action == new ObjCRuntime.Selector("cut:")
                || action == new ObjCRuntime.Selector("copy:") || action == new ObjCRuntime.Selector("_share:")
                || action == new ObjCRuntime.Selector("_define:"))
            {
                return false;
            }
            return base.CanPerform(action, withSender);
        }

Algo que puedes notar es que tienes que generar una instancia del objeto Selector para comparar cada una de las opciones que desees eliminar y que el identificador de cada una de las opciones es una cadena que debes pasar en el constructor de la instancia de selector, en el código anterior estamos deshabilitando las opciones de pegar(paste:), cortar(cut:), copiar (copy:), compartir(_share:) y definir(_define:).

3.- Y por último debes utilizar esta clase personalizada en cada control que desees que no tenga esta funcionalidad.

El resultado

![](/images/2018/01/MyCustomUITextField.gif)

Como verás la implementación en Xamarin.iOS no es complicada, solo queda no equivocarse con las “magic strings”, nos leemos en un siguiente post.

¡Saludos!
@saturpimentel

Fuentes

canPerformAction(_:withSender:)

Atributo Register

compartir en

Saturnino Pimentel
Escrito por
Saturnino Pimentel
Software developer