2010-07-09 17 views
25

Tengo un UIView que me gustaría añadir varios fragmentos de texto a. He usado un UITextView pero creo que es exagerado ya que no necesita ser editable. Pensé en usar un UILabel o una UITextField, pero no veo cómo se le dice al supervista dónde emplazar el UILabel o UITextField dentro de sí mismo. Quiero que el objeto huella más bajo que me deja poner texto de una fuente/color/tamaño de mi elección en mi UIView donde yo quiero. No hay mucho que preguntar, ¿eh?Cómo agregar mediante programación de texto a un UIView

Respuesta

60

El método más sencillo para ti sería:

UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 20)]; 

[yourLabel setTextColor:[UIColor blackColor]]; 
[yourLabel setBackgroundColor:[UIColor clearColor]]; 
[yourLabel setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]]; 
[yourSuperView addSubview:yourLabel]; 

edificio o poblar Vistas en su código, probablemente, será necesario que utilice CGRectMake mucho. Como su nombre lo dice, se crea un rectángulo que se puede utilizar para ajustar la posición relativa (en relación con las fronteras de su supervista) y el tamaño de su UIView-Subclass (en este caso un UILabel).

funciona así:

yourLabel.Frame = CGRectMake(x, y, width, height); //x,y,width,height are float values. 

x define el espacio entre el borde izquierdo de la supervista y el comienzo de la subvista su punto de añadir, mismo se aplica a y pero relativos a la separación entre la parte superior -borde de su supervista. , entonces el ancho y la altura se explican por sí solos, creo.

Espero que esto te lleve a la pista.

+1

Miré hacia arriba tanto UILabel y UITextField en la documentación y ver que heredan de ... UITextField: uicontrol: UIView: UIResponder: NSObject UILabel: UIView: UIResponder: NSObject así que supongo que ya que ambos heredan de UIView, que tienen todas las propiedades que tiene UIView? ... además de los extras que recogen en el camino? Esto tiene sentido, pero en la documentación para UILabel, Apple no enumera los métodos que no sean - (void) drawTextInRect: (CGRect) rect y - textRectForBounds (CGRect): (CGRect) constituyen límites – Steve

+0

(cuadros de comentarios son demasiado pequeños para gente prolija como yo ...) ¿Puedo suponer que tengo acceso a todas las propiedades de todas las superclase de la cadena de NSObject para cualquier clase que uso? ¡Gracias por la ayuda, se agradece! – Steve

+0

sí, tienes razón, así es exactamente como funciona la herencia. Todavía no obtengo lo que desea lograr con drawTextInRect, etc. Un UILabel (o una UITextview para el caso) son vistas que le proporcionan una funcionalidad que le permite establecer texto de una manera muy fácil. Tal vez simplemente no veo el problema aquí :). – samsam

0

agregue un UILabel a su vista. a continuación, anule el método ViewSubviews de View.

8

En lugar de encontrar una manera de decirle a la vista dónde emplazar el UILabel, puede decirle al UILabel donde posicionarse en la vista mediante el uso de "centro".

E.g.

myLabel.center = CGPointMake(0.0, 0.0); 

Espero que puedas usar UILabel, para mí es la forma básica de un texto flexible no editable.

+0

Gracias - una forma bonita y concisa de decirlo. ¿Estoy en lo cierto al pensar que cosas como UILabel tienen menos carga que una UIView completa? Ahora que yo (creo que) me doy cuenta de que hereda de UIView, ¿es esto una suposición errónea? – Steve

+1

Steve, creo que eres un perfeccionista y eso es bueno. Pero nuestra línea de pensamiento es bastante diferente, UILabel ya está disponible para ti como una conveniencia, totalmente probada. UIView lo está haciendo a un nivel inferior.Sí, puede significar menos sobrecarga, más rápido, menos uso de memoria, pero con el esfuerzo y los errores que pueden ocurrir, ¿vale la pena? Sugiero usar UILabel si satisface sus necesidades, a menos que muestre miles de ellas, entonces puede reconsiderar su estrategia de usar una forma más eficiente de hacer las cosas. – Manny

2

Esta pregunta es viejo, pero para una opción de texto UIView pura sin usar UILabel o UITextField (como todas las otras respuestas describir, pero la pregunta es cómo hacerlo sin ellos), drawRect en un UIView subclase funciona para mí. De este modo:

- (void)drawRect:(CGRect)rect{ 
    NSString *string = @"Hello World!"; 
    [string drawAtPoint:CGPointMake(100, 100) withFont:[UIFont boldSystemFontOfSize:16.0]]; 
} 
+1

Retiro esto ahora. En realidad, esto se desaconseja en iOS 7, Apple dice: "Muchas adiciones de dibujos a la clase NSString están en desuso en favor de variantes más nuevas". es decir drawAtPoint: WithFont no es la mejor manera de dibujar un nsstring en Uiview. – entire

+0

Puede usar - (void) drawAtPoint: (CGPoint) point withAttributes: (NSDictionary *) attrs NS_AVAILABLE_IOS (7_0); para iOs7 y posteriores – goelectric

1

Esta rutina muestra un texto en una posición XY

-(void)placeText:(NSString *)theText:(int)theX:(int)theY { 
    UILabel *textLabel; 

    // Set font and calculate used space 
    UIFont *textFont = [UIFont fontWithName:@"Helvetica" size:14]; 
    CGSize textStringSize = [theText sizeWithFont:textFont constrainedToSize:CGSizeMake(300,50) lineBreakMode:NSLineBreakByTruncatingTail]; 

    // Position of the text 
    textLabel = [[UILabel alloc] initWithFrame:CGRectMake(theX+OFFSETIMAGEX-(textStringSize.width/2), theY+OFFSETIMAGEY-(textStringSize.height/2), textStringSize.width,textStringSize.height)]; 

    // Set text attributes 
    textLabel.textColor = [UIColor blackColor]; 
    textLabel.backgroundColor = [UIColor orangeColor]; 
    textLabel.font = textFont; 
    textLabel.text = theText; 

    // Display text 
    [self.view addSubview:textLabel]; 
} 
2

para SWIFT:

let yourLabel = UILabel(frame: CGRectMake(100, 100, 100, 100)) 
    yourLabel.textColor = UIColor.whiteColor() 
    yourLabel.backgroundColor = UIColor.blackColor() 
    yourLabel.text = "mylabel text" 
    yoursuperview.addSubview(yourLabel) 
+0

para swift 3 solo cambie la sintaxis de UILabel a UILabel (cuadro: CGRect (x: 100, y: 100, ancho: 100, alto: 100)) –

1

Puede ser que sea tarde, pero aquí es lo que utilizo: -

CGRect labelFrame = CGRectMake(120,300, 530, 100); 
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame]; 
//If you need to change the color 
[myLabel setTextColor:[UIColor whiteColor]]; 
//If you need to change the system font 
[myLabel setFont:[UIFont fontWithName:NULL size:23]]; 
//If you need alignment 
[myLabel setTextAlignment:NSTextAlignmentCenter]; 
// The label will use an unlimited number of lines 
[myLabel setNumberOfLines:0]; 
//Add label view to current view 
[self.view addSubview:myLabel]; 
NSString *someString = @"Sample String, Yarp!"; 
myLabel.text = someString; 
Cuestiones relacionadas