Me gustaría insertar el texto de a UITextField
.
es posible?
ios
cocoa-touch
uitextfield
RunLoop
fuente
fuente
Respuestas:
La anulación
-textRectForBounds:
solo cambiará la inserción del texto del marcador de posición. Para cambiar el recuadro del texto editable, también debe anular-editingRectForBounds:
fuente
UITextField
reside dentro de aUIScrollView
.- (CGRect)clearButtonRectForBounds:(CGRect)bounds { return CGRectMake(x, y, w, h); }
Encontrado aquí: stackoverflow.com/questions/5361369/…Pude hacerlo a través de:
Por supuesto, recuerde importar QuartzCore y también agregar el Framework a su proyecto.
fuente
UITextField
se superpone al contenido del lado derecho.Si solo necesita un margen izquierdo, puede probar esto:
Esto funciona para mi. Espero que esto pueda ayudar.
fuente
leftView.backgroundColor = textField.backgroundColor;
... Aparte de esa gran solución ... Gracias (:En una clase derivada de UITextField, anule al menos estos dos métodos:
Puede ser tan simple como esto si no tiene contenido adicional:
UITextField proporciona varios métodos de posicionamiento que puede anular.
fuente
- (CGRect)borderRectForBounds:(CGRect)bounds; - (CGRect)placeholderRectForBounds:(CGRect)bounds; - (CGRect)clearButtonRectForBounds:(CGRect)bounds; - (CGRect)leftViewRectForBounds:(CGRect)bounds; - (CGRect)rightViewRectForBounds:(CGRect)bounds;
¿Qué tal una
@IBInspectable
,@IBDesignable
clase rápida.Verás esto en tu guión gráfico.
Actualización - Swift 3
fuente
let rect = CGRect(x: bounds.minX, y: bounds.minY + insetY, width: bounds.width, height: bounds.height) return CGRectInset(rect , insetX , 0)
textRect
/editingRect
) afecta el rendimiento de desplazamiento (al menos en iOS 12), cuando el texto desborda el rectángulo visible. Con una inserción de 15, incluso deja de desplazarse.Si tiene un botón de borrar, la respuesta aceptada no funcionará para usted. También debemos evitar que Apple cambie las cosas en el futuro llamando
super
.Entonces, para asegurarnos de que el texto no se superponga con el botón de borrar, obtengamos el valor 'predeterminado' desde el
super
principio, luego ajustemos según sea necesario.Este código agregará una inserción de 10px en la parte superior, izquierda e inferior del campo de texto:
Nota: UIEdgeInsetsMake toma parámetros en el orden: arriba , izquierda , abajo , derecha .
fuente
textRectForBounds:
y loseditingRectForBounds:
métodos sinclearButtonRectForBounds:
iOS 7+ funcionaron para mí.clearButtonRectForBounds:
solo ayuda a empujar un poco el botón de borrar a la izquierda. Puede que quieras dejarlo fuera. Mi campo de texto estaba sobre un fondo oscuro, y el botón de borrar necesitaba un poco de relleno adicional a la derecha.Pensé que proporcionaría una solución rápida
Swift 3+
fuente
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
textRectForBounds
, el marcador de posición también se ve afectado, por lo que agregar la anulación de marcador de posición inserta el marcador de posición otros 10 puntos más. Si eso es lo que estás buscando, 👍🏼, pero si no, es bueno tenerlo en cuenta.Usar
textRectForBounds:
es el enfoque correcto. He envuelto esto en mi subclase para que pueda usarlotextEdgeInsets
. Ver SSTextField .fuente
Rápido
fuente
Para las personas que buscan una solución más fácil.
Agregue el
UITextField
interior aUIView
. Para simular un recuadro alrededor del campo de texto, mantengo 10 px a la izquierda y el ancho es 20 px menos que la vista. Para un borde de esquina redondeada alrededor del campo de texto, use el borde de la vistafuente
UITextView
quizás?Puede configurar el recuadro de texto para UITextField configurando leftView.
Me gusta esto:
fuente
imageView.contentMode = UIViewContentMode.Center imageView.frame = CGRectMake(0.0, 0.0, imageView.image!.size.width + 16.0, imageView.image!.size.height)
Rápido
fuente
Un buen enfoque para agregar relleno a UITextField es subclasificar UITextField 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
Swift 3 / Designable en el generador de interfaces / Separar insectos horizontales y verticales / utilizable de fábrica
uso:
Y
fuente
Hice esto en IB donde creé una UIView detrás del textView que fue un poco más larga. Con el color de fondo textField establecido en claro.
fuente
Es la forma más rápida que he encontrado sin hacer ninguna subclase:
En Swift:
fuente
Aquí está el mismo UITextField subclasificado escrito en Swift 3. Es bastante diferente de las versiones anteriores de Swift, como verá:
Por cierto, también puede hacer algo como lo siguiente, si desea controlar la inserción de un solo lado. Este ejemplo particular de ajustar solo el recuadro izquierdo es útil si coloca una imagen en la parte superior de UITextField pero desea que aparezca para el usuario dentro del campo de texto:
fuente
Versión Swift 4.2 :
fuente
Puede ajustar el posicionamiento del texto dentro de un campo de texto convirtiéndolo en una subclase
UITextField
y anulando el-textRectForBounds:
método.fuente
Es absurdo que tengas que subclasificar, ya que
UITextField
ya implementa los métodos, como señala @Adam Waite. Aquí hay una extensión rápida que expone un método de fábrica, también disponible en nuestro repositorio de categorías :fuente
Subclasé UITextField para manejar esto que admite la inserción izquierda, superior, derecha e inferior, y también la posición clara del botón.
MRDInsetTextField.h
MRDInsetTextField.m
Ejemplo de uso donde * _someTextField * proviene de la vista nib / storyboard con la clase personalizada MRDInsetTextField
fuente
Esto no es tan corto como los otros ejemplos, pero adopta un enfoque completamente diferente para resolver este problema. Tenga en cuenta que el cursor aún comenzará a ras hasta el borde izquierdo, pero el texto se sangrará correctamente cuando se escriba / muestre. Esto funciona sin subclasificar si está buscando solo un margen izquierdo y ya está utilizando
UITextFieldDelegate
sus campos de texto. Debe establecer los atributos de texto predeterminados y los atributos de escritura. Establece los atributos de texto predeterminados cuando crea el campo de texto. Los atributos de escritura que debe establecer en el delegado. Si también está utilizando un marcador de posición, también querrá establecerlo en el mismo margen. En conjunto, obtienes algo como esto.Primero crea una categoría en la
UITextField
clase.Luego, si está utilizando marcadores colocados, asegúrese de usar un marcador de posición atribuido que establezca la misma sangría. Cree un diccionario con atributos predeterminados con los atributos adecuados, algo como esto:
Luego, importe la categoría anterior y cada vez que cree un campo de texto establezca la sangría predeterminada, el delegado y use los atributos de marcador de posición predeterminados definidos anteriormente. Por ejemplo:
Por último, en el delegado, implemente el
textFieldDidBeginEditing
método, algo como esto:fuente
defaultTextAttributes
contieneNSMutableParagraphStyle
es bastante peligrosa. Prefiero mutable Copiar todo esto.Normalmente trato de evitar las subclases, pero esto funciona si ya tienes:
fuente
Para agregar otra solución que no necesita subclases:
Probado con iOS 7 y iOS 8. Ambos funcionan. Aún así, podría existir la posibilidad de que Apple modifique la jerarquía de capas de UITextField y arruine las cosas.
fuente
Aquí hay una respuesta completa de Swift que incluye un LeftView (icono personalizado) y un botón de borrado personalizado, ambos configurados en Interface Builder con inserciones personalizables.
fuente
Una solución que realmente funciona y cubre todos los casos:
offsetBy
noinsetBy
.Rect
.Muestra:
fuente
Si desea cambiar la sangría SUPERIOR e IZQUIERDA solo entonces
// posición del marcador de posición
// posición del texto
fuente
Solución rápida sin subclase y también inspeccionable
fuente