2009-08-28 8 views
212

Estoy desarrollando una aplicación donde el usuario tiene que escribir cierta información. Para este propósito necesito un UITextField que es multilínea (en general UITextField es una sola línea).Cómo crear un UITextfield multilínea?

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

+1

uso este tercer partido clases importar su proyecto Xcode y lo utilizan, su trabajo demasiado bueno enlace: https: // github. com/adonoho/HPGrowingTextView –

+0

Aquí está el pequeño control escribí exactamente para ese propósito. cuenta con el apoyo de varias líneas y también el botón Hecho para cerrar el teclado. sentir libre de usarlo https://code.google.com/p/galtextfield/ –

Respuesta

370

UITextField es específicamente una sola línea.

Su búsqueda en Google es correcta, necesita usar UITextView en lugar de UITextField para visualizar y editar texto de líneas múltiples.

En Interface Builder, agregue UITextView donde lo desee y seleccione la casilla "editable". Será multilínea por defecto.

+6

Así que dime por favor qué aplicación Calendario nativa hace View con marcador de posición y ajuste de línea para las notas en caso de pantalla añadiendo? – zest

+2

cómo establecer el marcador de posición para UITextView? – Mani

+4

No se puede agregar a TextView marcador de posición, pero puede agregar una etiqueta gris sobre TextView, y esconderlo si la entrada del usuario algún texto. –

2

Sí, una UITextView es lo que estás buscando. Tendrá que lidiar con algunas cosas de manera diferente (como la tecla de retorno) pero puede agregarle texto, y le permitirá desplazarse hacia arriba y hacia abajo si hay demasiado texto adentro.

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

create a data entry screen

+0

Enlace trabajó para mí –

7

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

Consulte esta pregunta para obtener más detalles: Placeholder in UITextView.

21

Ok lo hice con algún truco;) En primer lugar construir un UITextField y aumentó su size así:

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

luego construir un UITextView exactamente en la misma zona que u hizo que mi UITextField, y se elimina su background color . ¡Ahora parece que tienes varias líneas TextField!

+1

que utilizan el diseño de automóviles y cubrió a todos los lados de la UITextField a la UITextView. Muy buen truco, gracias! – phatmann

+0

por favor @phantmann, ¿nos puede mostrar su código para el diseño automático? – Esteve

+6

Esto crea un 'UITextView'.El objetivo de tener un UITextField es que se comporte de forma diferente a 'UITextView'. –

1

Si debe tener un UITextField con 2 líneas de texto, una opción es agregar una UILabel como subvista del UITextField para la segunda línea de texto. Tengo un UITextField en mi aplicación que los usuarios a menudo no saben que se puede editar tocando, y quería agregar un pequeño texto de subtítulo que diga "Tocar para editar" al 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]; 
0

Un suplemento a la respuesta de h4xxr en lo anterior, una forma más fácil para ajustar la altura de la UITextField es seleccionar el estilo de borde cuadrado en el atributo inspectors-> Campo de texto. (Por defecto, el estilo de borde de un UITextField es elipse.)

Referencia: Brian respondida aquí: How to set UITextField height?

1

uso UITextView en lugar de UITextField

9

Usted puede fingir un UITextField usando UITextView. El problema que tendrás es que pierdes la funcionalidad del marcador de posición.

Si usted elige utilizar un UITextView y necesita el marcador de posición, haga lo siguiente:

En su viewDidLoad establecer el color y el texto de los marcadores de posición:

myTxtView.textColor = .lightGray 
myTxtView.text = "Type your thoughts here..." 

luego hacer el marcador de posición desaparece cuando su UITextView está seleccionado:

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

Cuando el usuario termine de editar, asegúrese de que haya un valor. Si no lo hay, añadir el marcador de posición de nuevo:

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

Otras características puede que tenga que fingir:

de frecuencia capitalizar cada letra UITextField, se puede añadir esa característica a UITableView:

myTxtView.autocapitalizationType = .words 

UITextField de por lo general no se desplazan:

myTxtView.scrollEnabled = false 
-1

no hay otra opción que trabajó para mí:

Subclase UITextField y sobrescribir:

- (void)drawTextInRect:(CGRect)rect 

En este método se puede, por ejemplo:

NSDictionary *attributes = @{ NSFontAttributeName : self.font, 
            NSForegroundColorAttributeName : self.textColor }; 

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes]; 

Este código hará que el texto utilizando como muchas líneas según sea necesario si el rect tiene suficiente espacio. Puede especificar cualquier otro atributo según sus necesidades.

No utilizar:

self.defaultTextAttributes 

lo que obligará a una línea de texto renderizado