En la biblioteca de IB, la introducción nos dice que cuando returnse presiona la tecla, el teclado UITextView
desaparecerá. Pero en realidad la returnclave solo puede actuar como '\ n'.
Puedo agregar un botón y usarlo [txtView resignFirstResponder]
para ocultar el teclado.
Pero, ¿hay alguna manera de agregar la acción de la returntecla en el teclado para que no necesite agregar UIButton
?
iphone
objective-c
keyboard
uitextview
iphone-softkeyboard
Zhong frío
fuente
fuente
Respuestas:
UITextView
no tiene ningún método que se invocará cuando el usuario presione la tecla de retorno. Si desea que el usuario pueda agregar solo una línea de texto, use aUITextField
. Al presionar la tecla de retorno y ocultar el teclado por unUITextView
no se siguen las pautas de la interfaz.Aun así, si desea hacer esto, implemente el
textView:shouldChangeTextInRange:replacementText:
métodoUITextViewDelegate
y, en esa verificación, si el texto de reemplazo es\n
, oculte el teclado.Puede haber otras formas, pero no conozco ninguna.
fuente
[textField setReturnKeyType: UIReturnKeyDone];
o usar constructor de interfacesSupuse que publicaría el fragmento aquí mismo:
Asegúrese de declarar soporte para el
UITextViewDelegate
protocolo.Actualización de Swift 4.0:
fuente
Sé que esto ya ha sido respondido, pero realmente no me gusta usar el literal de cadena para la nueva línea, así que esto es lo que hice.
Actualización de Swift 4.0:
fuente
NSString *replacedText = [textView.text stringByReplacingCharactersInRange:range withString:text]
.Sé que esto ha sido respondido muchas veces, pero aquí están mis dos centavos al problema.
Encontré las respuestas de samvermette y ribeto realmente útiles, y también el comentario de maxpower en la respuesta de ribeto . Pero hay un problema con esos enfoques. El problema que mate menciona en el samvermette 's respuesta y es que si el usuario quiere pegar algo con un salto de línea en su interior, el teclado ocultaría sin pegar nada.
Entonces, mi enfoque es una mezcla de las tres soluciones mencionadas anteriormente y solo verifico si la cadena ingresada es una nueva línea cuando la longitud de la cadena es 1, por lo que nos aseguramos de que el usuario escriba en lugar de pegar.
Esto es lo que he hecho:
fuente
Una forma más elegante es descartar el teclado cuando el usuario toca en algún lugar fuera del marco del teclado.
Primero, configure la vista de su ViewController en la clase "UIControl" en el inspector de identidad en UIBuilder. Control-arrastre la vista al archivo de encabezado de ViewController y vincúlela como una acción con el evento como Retocar adentro, como:
ViewController.h
En el archivo principal de ViewController, ViewController.m:
Puede requerir un doble toque o toque prolongado utilizando técnicas similares. Es posible que deba configurar su ViewController para que sea UITextViewDelegate y conectar TextView al ViewController. Este método funciona tanto para UITextView como para UITextField.
Fuente: Big Nerd Ranch
EDITAR: También me gustaría agregar que si está utilizando un UIScrollView, la técnica anterior puede no funcionar tan fácilmente a través del Creador de interfaces. En ese caso, puede usar un UIGestureRecognizer y llamar al método [[self view] endEditing: YES] dentro de él. Un ejemplo sería:
Cuando el usuario toca fuera del teclado y no toca un espacio de entrada, el teclado se cerrará.
fuente
GestureRecognizer
pero el gran problema es que ya no se puede hacer clic en todos los botones o controles de la vista.Agregue este método en su controlador de vista.
Rápido :
Este método también puede ser útil para usted:
fuente
super.touchesBegan(touches:withEvent:)
.else { return true }
.También agregue
UITextViewDelegate
No olvides confirmar el protocolo
SI no agregaste
if([text isEqualToString:@"\n"])
no puedes editarfuente
NO
si el texto es igual a@"\n"
.Hay otra solución mientras se usa con uitextview, puede agregar la barra de herramientas como InputAccessoryView en "textViewShouldBeginEditing", y desde el botón Listo de esta barra de herramientas puede descartar el teclado, el código para esto es el siguiente:
fuente
Encontré la respuesta de josebama era la respuesta más completa y limpia disponible en este hilo.
A continuación se muestra la sintaxis de Swift 4 :
fuente
resultRange
objetivo es probar si el texto solo contiene nuevas líneas que evitan el código "\ n".rápido
fuente
Uso del controlador de navegación para alojar una barra para descartar el teclado:
en el archivo .h:
en el archivo .m:
fuente
Al igual que Matt comenta a Samvermette, tampoco me gusta la idea de detectar "\ n". La tecla "volver" está ahí por una razón en UITextView, que es ir a la siguiente línea, por supuesto.
La mejor solución en mi opinión es imitar la aplicación de mensajes de iPhone, que es agregar una barra de herramientas (y un botón) en el teclado.
Obtuve el código de la siguiente publicación de blog:
http://www.iosdevnotes.com/2011/02/iphone-keyboard-toolbar/
Pasos:
-Agregue la barra de herramientas a su archivo XIB: establezca la altura en 460
-Agregar elemento de botón de barra de herramientas (si aún no se ha agregado). Si necesita alinearlo a la derecha, agregue también un elemento de botón de barra flexible a XIB y mueva el elemento de botón de barra de herramientas
-Cree acciones que vinculen el elemento de su botón para renunciar FirstResponder de la siguiente manera:
-Entonces:
fuente
Acabo de resolver este problema de una manera diferente.
Control arrastre el botón al
viewController.h
archivo y cree una acción (Evento enviado: Retocar adentro) como:En
ViewController.m
debería verse así:fuente
Agregar un observador en viewDidLoad
y luego use el selector para verificar "\ n"
Utiliza "\ n" y no busca específicamente una clave de retorno, pero creo que esto está bien.
ACTUALIZAR
Vea la respuesta de ribto a continuación, que utiliza
[NSCharacterSet newlineCharacterSet]
en lugar de\n
fuente
\n
y la clave de retorno se detecta en función de\n
lo que comprueba la clave de retorno. La única diferencia es que está utilizando notificaciones en lugar de utilizar textViewDelegates.[NSCharacterSet newlineCharacterSet]
lugar de \ n podría ser una mejor manera de hacerlo.código SWIFT
Implemente UITextViewDelegate en su clase / Vista así:
establecer el delegado textView en self
Y luego implemente lo siguiente:
EDITAR He actualizado el código porque nunca es una buena idea cambiar la entrada del usuario en un campo de texto para un entorno de trabajo y no restablecer el estado después de que se complete el código de pirateo.
fuente
Prueba esto :
fuente
// Puedes usar esto ...
Paso 1. El primer paso es asegurarte de que declaras soporte para el
UITextViewDelegate
protocolo. Esto se hace en su archivo de encabezado, como ejemplo aquí es el encabezado llamadoEditorController.h:
Paso 2. A continuación, deberá registrar el controlador como delegado de UITextView. Continuando con el ejemplo anterior, así es como he inicializado
UITextView
conEditorController
como delegado ...Paso 3. Y ahora la pieza final del rompecabezas es actuar en respuesta al
shouldCahngeTextInRange
mensaje de la siguiente manera:fuente
También puede ocultar el teclado cuando se toca en la pantalla de visualización:
fuente
Respuesta rápida:
fuente
Usé este código para cambiar el respondedor.
fuente
La pregunta pregunta cómo hacerlo con la tecla de retorno, pero creo que esto podría ayudar a alguien con la intención de hacer desaparecer el teclado al usar UITextView:
Llame a addToolBarForTextView () en viewDidLoad o algún otro método de ciclo de vida.
Parece que esa fue la solución perfecta para mí.
Salud,
Murat
fuente
Okay. Todos han dado respuestas con trucos, pero creo que la forma correcta de lograr esto es mediante
Conectando la siguiente acción al evento " Terminó al salir " en
Interface Builder
. (haga clic con el botón derechoTextField
y arrastre cntrl desde 'Finalizó al salir ' al siguiente método.fuente
Simular a otras respuestas usando la
UITextViewDelegate
interfaz rápida pero más nuevaisNewline
sería:fuente
fuente
fuente
Sé que no es la respuesta exacta a esta pregunta, pero encontré este hilo después de buscar una respuesta en Internet. Asumo que otros comparten ese sentimiento.
Esta es mi variación del UITapGestureRecognizer que encuentro confiable y fácil de usar: solo configure el delegado de TextView en ViewController.
En lugar de ViewDidLoad, agrego UITapGestureRecognizer cuando TextView se activa para editar:
Cuando toco fuera de TextView, la vista finaliza el modo de edición y UITapGestureRecognizer se elimina para poder continuar interactuando con otros controles en la vista.
Espero que esto ayude. Parece tan obvio, pero nunca he visto esta solución en ninguna parte de la web. ¿Estoy haciendo algo mal?
fuente
No olvide configurar el delegado para textView; de lo contrario, renunciar a la primera respuesta no funcionará.
fuente
Prueba esto .
fuente
Para Xcode 6.4., Swift 1.2. :
fuente
Debería agregar
UIToolbar
a UITextView superior para facilitar en lugar de usarshouldChangeTextIn
En Swift 4
fuente
toolbar.sizeToFit()