web-dev-qa-db-fra.com

Comment ajouter du texte par programmation à une UIView

J'ai un UIView auquel j'aimerais ajouter plusieurs bits de texte. J'ai utilisé un UITextView mais je pense que c'est exagéré car il n'a pas besoin d'être modifiable. J'ai pensé à utiliser un UILabel ou un UITextField, mais je ne vois pas comment vous dites à la vue d'ensemble où placer le UILabel ou UITextField en lui-même . Je veux l'objet à empreinte minimale qui me permettra de mettre le texte d'une police/couleur/taille de mon choix dans mon UIView où je le veux. Pas trop à demander, hein?

26
Steve

L'approche la plus simple pour vous serait:

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];

Pour créer ou remplir des vues dans votre code, vous devrez probablement beaucoup utiliser CGRectMake. Comme son nom l'indique, il crée un rectangle que vous pouvez utiliser pour définir la position relative (par rapport aux bordures de votre vue d'ensemble) et la taille de votre UIView-Subclass (dans ce cas un UILabel).

Cela fonctionne comme ceci:

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

x définit l'espacement entre la bordure gauche de la vue d'ensemble et le début de la sous-vue que vous êtes sur le point d'ajouter, il en va de même pour y mais en ce qui concerne l'espacement entre la bordure supérieure de votre vue d'ensemble. alors la largeur et la hauteur sont explicites, je pense.

J'espère que cela vous mettra sur la bonne voie.

63
samsam

Au lieu de trouver un moyen d'indiquer à la vue où positionner l'UILabel, vous pouvez indiquer à l'UILabel où se positionner dans la vue en utilisant "center".

Par exemple.

myLabel.center = CGPointMake(0.0, 0.0);

J'espère que vous pourrez utiliser UILabel, pour moi, c'est la forme de base d'un texte flexible non modifiable.

8
Manny

Pour 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)
3
Esqarrouth

Cette question est ancienne, mais pour une option de texte UIView pure sans utiliser UILabel ou UITextField (comme toutes les autres réponses le décrivent, mais la question est de savoir comment le faire sans elles), drawRect dans une sous-classe UIView fonctionne pour moi. Ainsi:

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

Cette routine affiche un texte à une position X-Y

-(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];
}
1
Vincent

Il pourrait être en retard mais voici ce que j'utilise: -

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;
1
CmosII

ajoutez un UILabel à votre vue. puis remplacez la méthode layoutSubviews de View.

0
gga80