La funcionalidad UITextView
'Copiar, Cortar, Seleccionar, Seleccionar Todo' se muestra de forma predeterminada cuando presiono hacia abajo en la pantalla. Pero, en mi proyecto, UITextField
solo es de lectura. No necesito esta funcionalidad. Por favor dígame cómo deshabilitar esta función.
ios
objective-c
uitextview
Aishwarya
fuente
fuente
Respuestas:
La forma más sencilla de deshabilitar las operaciones de la mesa de trabajo es crear una subclase
UITextView
que anule elcanPerformAction:withSender:
método para devolver lasNO
acciones que no desea permitir:Ver también UIResponder
fuente
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- para bloquear todas las opcionesSubclase UITextView y sobrescribir canBecomeFirstResponder:
Tenga en cuenta que esto solo se aplica a UITextViews no editables. No lo he probado en editables ...
fuente
return NO;
el- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
método es una mejor opción.Si desea deshabilitar cortar / copiar / pegar en toda
UITextView
su aplicación, puede usar una categoría con:Guarda una subclasificación ... :-)
fuente
UITextView
comporte como se esperaba cuando, por ejemplo, es editable y recibe un toque. Es mucho para anularcanPerformAction:withSender:
; para eso es el protocolo.Esta fue la mejor solución de trabajo para mí:
de: https://stackoverflow.com/a/5704584/1293949
fuente
La respuesta de @rpetrich funcionó para mí. Estoy publicando el código expandido en caso de que le ahorre a alguien algo de tiempo.
En mi caso, no quiero ninguna ventana emergente, pero sí quiero que UITextField pueda convertirse en el primer respondedor.
Desafortunadamente, todavía aparece la ventana emergente de la lupa cuando mantiene presionado el campo de texto.
Rápido 4
fuente
Si no necesita UITextView para desplazarse, entonces la solución más simple que no implica subclases es simplemente deshabilitar la interacción del usuario para la vista de texto:
fuente
La forma más sencilla es crear una subclase de UITextView que anule canPerformAction: withSender:
fuente
Cuando devuelva NO en canPerformAction en iOS 7, obtendré muchos errores como este:
<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Mi solución es la siguiente:
El truco consiste en ocultar el controlador del menú en el siguiente ciclo de la cola principal (justo después de que se muestre).
fuente
Esta es la forma más fácil de deshabilitar todo el menú Seleccionar / Copiar / Pegar en un UITextView
fuente
Desde iOS 7 hay una propiedad en UITextView:
Esto evita que una vista permita selecciones de texto. Funciona muy bien para mi.
fuente
Si está buscando reemplazar el teclado con, digamos,
UIPicker
comoinputView
(con, por supuesto, una barra de herramientas comoinputAccesotyView
), entonces esta solución podría ayudar ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
, ajústelo en SÍ.Al hacer esto, podría tocar
UITextField
y mostrar las opciones para elegirUIPickerView
, en este momentoUITextField
, de hecho, no reaccionaría a ningún evento táctil (esto incluye tocar y mantener presionado para cortar, copiar y pegar). Sin embargo, debe recordar volver a configurarlo en SÍ cuando cierre su,UIPickerView
sin embargo, no podrá volver a accederUIPickerView
a él.El único momento en que falla es cuando el usuario comienza presionando y manteniendo presionado
UITextView
, luego verá cortar, copiar y pegar nuevamente por primera vez. Es por eso que siempre debe validar sus entradas. Esto es lo más fácil que se me ocurre. La otra opción era usar unUILabel
para texto de solo lectura, pero se pierden muchas funciones excelentes deUITextView
.fuente
Subclase UITextView - swift 4.0
fuente
Si desea desactivar la ventana emergente
UITextField
, pruebe esteUITextFieldDelegate
método para alternarisUserInteractionEnabled
.fuente
Esto se puede hacer fácilmente en el guión gráfico (Xcode 6). Simplemente desmarque Editable y Seleccionable en Attributes Inspector. Aún puede desplazarse por la vista de texto.
fuente
Esto funcionó para mí. Asegúrese de llamar a resignFirstResponder en textView
fuente
Proporcioné una respuesta funcional aquí para deshabilitar la selección de texto + lupa, manteniendo habilitados los enlaces clikable Espero que ayude:
UIUnselectableTextView.m
fuente
Para Swift 3 se cambió a:
fuente
Puede solucionar esto en su guión gráfico desmarcando estas casillas:
O puede configurar programáticamente así:
fuente
Lo he hecho. En mi
UITextView
he desactivado la opción cortar, copiar, seleccionar, etc. muy fácilmente.Coloqué un
UIView
en el mismo lugar donde había colocado elUITextView
, peroself.view
y agregué untouchDelegate
método de la siguiente manera:Y funcionó para mí. Gracias.
fuente
Rápido
Relacionado
fuente
Si desea agregar una opción personalizada a su UITextView pero deshabilitar las funciones existentes, así es como lo hace en Swift 3 :
Para deshabilitar la funcionalidad de copiar, pegar, cortar, cree una subclase y anule lo siguiente:
En ViewController tienes tu CustomTextView agrega lo siguiente para agregar tus opciones:
fuente
Este método deshabilitará completamente el menú Seleccionar, Seleccionar todo, Pegar. Si aún obtiene alguna otra acción, simplemente agréguela a la condición if como se muestra a continuación.
fuente
Puedes crear una categoría como esta:
UITextView + Seleccionable.h
UITextView + Seleccionable.m
fuente
Subclasificar
UITextView
y reemplazar- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
es otra posibilidad para deshabilitar acciones no deseadas.Utilice la clase del
gestureRecognizer
-objeto para decidir si la acción debe agregarse o no.fuente
(SWIFT) Si solo desea un campo de texto básico sin ninguna de las opciones de menú o lupa, cree una subclase de UITextField que devuelva falso a gestoRecognizerShouldBegin:
Esto omitirá toda la funcionalidad táctil en el campo de texto, pero aún le permitirá usar el teclado emergente para agregar / eliminar caracteres.
Si está utilizando el guión gráfico, simplemente asigne la clase recién creada al campo de texto o si está creando un campo de texto mediante programación:
fuente
fuente
Swift 3
Para hacer esto, necesita subclasificar su UITextView y poner este método.
fuente
UITextView tiene dos propiedades que harán lo que necesite: isSelectable e isEditable .
Si establece isEditable en false, evitará que el usuario edite el texto y si establece isSelectable en false, evitará que el usuario seleccione texto dentro de su textView, por lo que evitará que se muestre el menú de acciones.
fuente
Encuentre el código de muestra como referencia:
fuente
Utilizar
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
en lugar detextFieldShouldBeginEditing
.Cree una nueva clase con el nombre StopPasteAction.swift
Agregue la clase nueva clase con su TextField actual
fuente