Quería usar un fondo personalizado para mi UITextFields
. Esto funciona bien, excepto por el hecho de que tengo que usar UITextBorderStyleNone
para que se vea bonito. Esto obliga al texto a pegarse a la izquierda sin ningún relleno.
¿Puedo configurar un relleno manualmente para que se vea similar a UITextBorderStyleRoundedRect
menos que use mi imagen de fondo personalizada?
ios
uitextfield
padding
Sebastian Wramba
fuente
fuente
*paddingView
con múltiples campos de texto?Creé esta implementación de categoría y la agregué al principio del
.m
archivo.Basado en el enlace que Piotr Blasiak proporcionó. Parecía más simple que crear una subclase completamente nueva, y también más simple que agregar el adicional
UIView
. Aún así, parece que falta algo para no poder controlar el relleno dentro de un campo de texto.Solución Swift 4:
fuente
Una versión de Swift 3 para Xcode> 6, donde puede editar el valor del recuadro en Interface Builder / Storyboard.
fuente
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
@IBDesignable
y qué@IBInspectable
hacer, es decirreturn super.textRectForBounds(CGRectInset(bounds, inset, inset))
, manejará el desplazamiento de las vistas de accesorios correctamente.Editar: todavía funciona en iOS 11.3.1
En iOS 6
myTextField.leftView = paddingView;
está causando problemasEsto resuelve el problema
Para el campo de texto alineado a la derecha, use
CATransform3DMakeTranslation(-5, 0, 0)
como mención latenitecoder en los comentariosfuente
Un buen enfoque para agregar relleno a UITextField es subclasificar y agregar una propiedad edgeInsets. Luego configura los edgeInsets y el UITextField se dibujará en consecuencia. Esto también funcionará correctamente con un conjunto personalizado leftView o rightView.
OSTextField.h
OSTextField.m
fuente
Simplemente subclase UITextField como este:
Esto agrega un relleno horizontal de 10 puntos a cada lado.
fuente
Código del objetivo C
MyTextField.h
MyTextField.m
fuente
Establezca su clase de campo de texto en PaddingTextField y personalice su relleno como desee
Disfrútala
fuente
Según la respuesta de Evil Trout, es posible que desee crear una categoría para que sea más fácil de usar en múltiples aplicaciones.
Archivo de cabecera:
Archivo de implementación:
Ejemplo de uso
Espero que te ayude chicos
Salud
fuente
Versión rápida:
Para que pueda asignar valor en IB
fuente
IBInspectable
le permite aplicar el código de configuración en tiempo de ejecución, así que simplemente ingrese su númeroInterface Builder
y funcionará.Clear Button
. Su botón de borrar no será visible si aplica esta solución.No se puede configurar el relleno. En su lugar, tenga una
UIView
que tenga su imagen de fondo y elUITextField
interior de la misma. Establezca elUITextField
anchoUIViewWidth-(paddingSize x 2)
y la altura de manera similar y luego configúrelo en el puntopaddingSize,paddingSize
.fuente
Simplemente subclase UITextField como este ( versión Swift ):
Esto agrega un relleno horizontal de 25.0 puntos a cada lado.
fuente
Me basé en la solución de Nate, pero luego descubrí que esto causa problemas cuando usas las propiedades leftView / rightView, por lo que es mejor ajustar la implementación del super, porque tendrá en cuenta la vista izquierda / derecha.
fuente
Versión actualizada para Swift 3:
fuente
Establecer relleno para UITextField con UITextBorderStyleNone: Swift
Basado en la respuesta más votada de @Evil Trout, creé un método personalizado en mi clase ViewController, como se muestra a continuación:
Ahora puedo llamar a ese método dentro (método viewDidLoad) y enviar cualquiera de mis TextFields a ese método y agregar relleno para derecha e izquierda, y dar colores de texto y fondo escribiendo solo una línea de código, de la siguiente manera:
¡Esto funcionó perfectamente en iOS 7! Sé que agregar demasiadas Vistas podría hacer que esta clase sea un poco más pesada para cargar. Pero cuando me preocupaba la dificultad en otras soluciones, me encontré más predispuesto a este método y más flexible al usarlo de esta manera. ;)
Gracias por el truco "Evil Trout"! (arco)
Pensé que debería actualizar el fragmento de código de esta respuesta con Swift:
Como Swift nos permite escribir extensiones para las clases existentes, escribámoslo de esa manera.
Uso:
¡Espero que esto sea útil para alguien más por ahí!
¡Salud!
fuente
Aquí se explica cómo lograr esto en SWIFT
Recurso
fuente
Versión Swift 2.0:
fuente
^ estas sugerencias son excelentes para aquellos que crean una interfaz mediante programación.
Pero hay dos LAZY EASY WAYS para aquellos de nosotros que usamos el generador de interfaces Xcode:
más fácil: coloque un UIImageView detrás de un campo de texto
más fácil: cambie el estilo de borde en su al cuadrado negro simple (segundo desde la opción izquierda), luego agregue su imagen como imagen de fondo. La imagen tiene prioridad sobre el cuadrado, por lo que aún obtiene el relleno necesario para un fondo de imagen normal, sin que el cuadrado se dibuje realmente.
EDITAR: también puede usar la esfera negra (tercera opción desde la izquierda al seleccionar UITextBox en IB), no funciona con el estilo de "esfera gráfica" del extremo derecho.
fuente
Si alguien está buscando la
Swift 4.0
versión, a continuación seextension
encuentra el trabajo. Tiene ambosLeft
yRight
relleno paraUITextField
. En realidad esIBInspectable
para la configuración del guión gráfico. Puede establecer el valor directamente desde Interface Builder / Storyboard. Este es el código probado en la versión Swift 4.0 y Xcode 9.0Tenga en cuenta que si desea habilitar
Clear Button
el mismoUITextField
, debe mantener el relleno derecho en blanco.fuente
La mejor manera de hacer esto es simplemente hacer una clase usando la subclase de UITextField y en el archivo .m
haciendo esto, vaya a su guión gráfico o xib y haga clic en el inspector de identidad y reemplace UITextfield con su propia opción "CustomTextField" en la clase.
Nota: Si simplemente proporciona relleno con diseño automático para el campo de texto, su aplicación no se ejecutará y mostrará solo la pantalla en blanco.
fuente
Versión Swift 3:
fuente
La respuesta de Nate Flink es mi favorita, pero no te olvides de las vistas derecha / izquierda. Por ejemplo, para la
UITextField
subclase:Por encima de código para establecer el relleno derecho
rightView
deUITextField
.fuente
Solución Swift 3
fuente
Aquí hay un código Swift para dar relleno en UITextfield
y llame usando
fuente
Puedes usar la categoría. establecer el relleno a izquierda y derecha
UITextField + Padding.h
UITextField + Padding.m
puede establecer un relleno como este self.phoneNumTF.paddingValue = 10.f; o self.phoneNumTF.leftPadding = 10.f;
fuente
La respuesta de @Evil trout es genial. He estado usando este enfoque durante bastante tiempo. Lo único que le falta es "tratar con numerosos campos de texto". Intenté otros enfoques pero no parece funcionar.
Subclasificar UITextField solo para agregar un relleno no tenía ningún sentido para mí. Entonces, iteré sobre todos los UITextFields para agregar el relleno.
fuente
textfieldarray
no está definido en el segundoif
bloque, usé este fragmento (¡gracias!) Con éxito después de reemplazar el contenido del segundoif
confor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
La solución de Brody funcionó perfecta para mí. He tenido que agregar vistas laterales en un campo de texto y agregar relleno adicional. Entonces, al implementar la propiedad personalizada UIEdgeInsets en una subclase de UITextField, he logrado realizar la tarea. Voy a usar esta nueva subclase en todos mis proyectos.
fuente
La mejor solución que encontré hasta ahora es una categoría. Así es como agrego un relleno de 5 puntos a izquierda y derecha:
Los # pragma son solo para eliminar las molestas advertencias
fuente
agregará borde, que funcionó como relleno para mí.
fuente
Otra consideración es que, si tiene más de uno
UITextField
donde está agregando relleno, es crear un campo separadoUIView
para cada campo de texto, porque no se pueden compartir.fuente