¿Cómo crear un UITextfield multilínea?

Estoy desarrollando una aplicación donde el usuario tiene que escribir algo de información. Para este propósito, necesito un UITextField que sea multilínea (en general, UITextField es una sola línea).

Como estoy buscando en Google, encuentro una respuesta de usar UITextView lugar de UITextfield para este propósito.

UITextField es específicamente de una sola línea.

Su búsqueda de Google es correcta, debe utilizar UITextView lugar de UITextField para mostrar y editar text de UITextField .

En Interface Builder, agregue un UITextView donde lo desee y select el cuadro "editable". Será multilínea por defecto.

Ok, lo hice con un truco;) Primero construya un UITextField y aumente su size esta manera:

 CGRect frameRect = textField.frame; frameRect.size.height = 53; textField.frame = frameRect; 

Luego construya un UITextView exactamente en la misma área en la que hizo mi UITextField , y borre su background color . ¡Ahora parece que tienes varias líneas TextField !

Además del comportamiento de líneas múltiples, la diferencia principal entre UITextView y UITextField es que UITextView no propone un marcador de position. Para evitar esta limitación, puede usar una UITextView con un "marcador de position falso".

Vea esta pregunta SO para más detalles: Marcador de position en UITextView .

Puede falsificar un UITextField utilizando UITextView. El problema que tendrás es que pierdes la funcionalidad de poseedor de lugar.

Si elige utilizar un UITextField y necesita el soporte de lugar, haga esto:

En su vista, DidLoad establece el color y el text en los marcadores de position:

 myTxtView.textColor = UIColor.LightGrayColor() myTxtView.text = "Type your thoughts here..." 

Luego, desactiva el marcador de position cuando se selecciona tu UITextView:

 func textViewDidBeginEditing (textView: UITextView) { if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() { myTxtView.text = nil myTxtView.textColor = UIColor.whiteColor() } } 

Cuando el usuario termine de editar, asegúrese de que haya un valor. Si no es así, agregue nuevamente el marcador de position:

 func textViewDidEndEditing (textView: UITextView) { if myTxtView.text.isEmpty || myTxtView.text == "" { myTxtView.textColor = UIColor.LightGrayColor() myTxtView.text = "Type your thoughts here..." } } 

Otras características que puede necesitar para falsificar:

A menudo, UITextField capitaliza cada letra, puede agregar esa function a UITableView:

 myTxtView.autocapitalizationType = .Words 

Los campos de UITextField generalmente no se desplazan:

 myTxtView.scrollEnabled = false 

Sí, un UITextView es lo que estás buscando. Tendrás que lidiar con algunas cosas de manera diferente (como la tecla de retorno), pero puedes agregarle text, y te permitirá desplazarte hacia arriba y hacia abajo si hay demasiado text dentro.

Este enlace tiene información sobre cómo hacer una pantalla para ingresar datos:

crear una pantalla de ingreso de datos

Si debe tener un UITextField con 2 líneas de text, una opción es agregar una UILabel como una subvista del UITextField para la segunda línea de text. Tengo un UITextField en mi aplicación que los usuarios a menudo no se dan count de que es editable tocando, y quería agregar un pequeño text de subtítulos que dice "Toque para editar" en UITextField.

 CGFloat tapLlblHeight = 10; UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)]; tapEditLbl.backgroundColor = [UIColor clearColor]; tapEditLbl.textColor = [UIColor whiteColor]; tapEditLbl.text = @"Tap to Edit"; [textField addSubview:tapEditLbl]; 

use UITextView en lugar de UITextField

Como complemento de la respuesta de h4xxr en lo anterior, una forma más fácil de ajustar la altura del UITextField es seleccionar el estilo de borde cuadrado en los inspectores de attributes-> Campo de text. (De forma pnetworkingeterminada, el estilo de borde de un UITextfield es elipse.)

Referencia: Respondió Brian aquí: ¿Cómo configurar la altura UITextField?

Hay otra opción que funcionó para mí:

Subclass UITextField y sobrescribir:

 - (void)drawTextInRect:(CGRect)rect 

En este método puede, por ejemplo:

  NSDictionary *attributes = @{ NSFontAttributeName : self.font, NSForegroundColorAttributeName : self.textColor }; [self.text drawInRect:verticalAlignedRect withAttributes:attributes]; 

Este código hará que el text use tantas líneas como sea necesario si el rect tiene suficiente espacio. Podría especificar cualquier otro atributo según sus necesidades.

No utilice:

 self.defaultTextAttributes 

que forzará una representación de text de línea