2009-06-05 11 views
6

Pourquoi mon UILabel n'est-il pas modifié? Je suis en utilisant le code suivant, et rien ne se passe:Pourquoi mon UILabel n'est-il pas modifié?

- (void)awakeFromNib { 
    percentCorrect.adjustsFontSizeToFitWidth; 
    percentCorrect.numberOfLines = 3; 
    percentCorrect.minimumFontSize = 100; 
} 

Voici mon code Implemintation:

- (void) updateScore { 
    double percentScore = 100.0 * varRight/(varWrong + varRight); 
    percentCorrect.text = [NSString stringWithFormat:@"%.2f%%", percentScore]; 
} 

- (void)viewDidLoad { 
    percentCorrect.adjustsFontSizeToFitWidth = YES; 
    percentCorrect.numberOfLines = 3; 
    percentCorrect.minimumFontSize = 100; 
    percentCorrect.text = @"sesd"; 
} 


- (void)correctAns { 
    numberRight.text = [NSString stringWithFormat:@"%i Correct", varRight]; 
} 

-(void)wrongAns { 
    numberWrong.text = [NSString stringWithFormat:@"%i Incorrect", varWrong]; 
} 

#pragma mark Reset Methods 
- (IBAction)reset:(id)sender; { 
    NSString *message = @"Are you sure you would like to reset?"; 
    self.wouldYouLikeToReset = [[UIAlertView alloc] initWithTitle:@"Reset?" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; 
    [wouldYouLikeToReset addButtonWithTitle:@"Continue"]; 
    [self.wouldYouLikeToReset show]; 
    // Now goes to (void)alertView and see's what is being pressed! 
} 

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) 
    { 
     NSLog(@"Cancel button pressed"); 
    } 
    else 
    { 
     varRight = 0; 
     varWrong = 0; 
     [self wrongAns]; 
     [self correctAns]; 
     percentCorrect.text = [NSString stringWithFormat:@"0.0%%"]; 

    } 
} 

#pragma mark Button Action Methods 

- (IBAction)right:(id)sender; { 
    varRight++; 
    [self correctAns]; 
    [self updateScore]; 
} 

- (IBAction)wrong:(id)sender; { 
    varWrong++; 
    [self wrongAns]; 
    [self updateScore]; 
} 


- (IBAction)subOneRight:(id)sender { 
    if (varRight > 0) { 
     varRight--; 
     [self correctAns]; 
     [self updateScore]; 
    } 
} 


- (IBAction)subOneWrong:(id)sender { 
    if (varWrong > 0) { 
     varWrong--; 
     [self wrongAns]; 
     [self updateScore]; 
    } 
} 

-(IBAction)addHalfCredit:(id)sender; 
{ 
    varWrong++; 
    varRight++; 
    [self wrongAns]; 
    [self correctAns]; 
    [self updateScore]; 
} 


@end 

Toutes les idées? Merci

+0

cette ligne doit être: [percentCorrect adjustFontSizeToFitWidth]; –

+7

il devrait être percentCorrect.adjustsFontSizeToFitWidth = YES; –

Répondre

0

Il est possible que percentCorrect n'ait pas encore été initialisé. Est percentCorrect égal à nil lorsque cette fonction est appelée, par hasard? Si c'est le cas, attendez qu'il soit correctement initialisé pour définir ses propriétés.

+0

vous avez raison, j'ai oublié de init. Mais, ne fonctionne toujours pas:/ –

2

Assurez-vous que tout est branché correctement. Assurez-vous que l'IBOutlet pour le UITextfield est configuré et définissez des points de rupture dans la méthode et vérifiez que le code est en cours de modification. Si c'est le cas, il est possible que le percentCorrect n'ait pas été branché correctement.

+0

Tout est entouré, parce que l'étiquette répond à mon IBActions –

+2

Pouvez-vous changer quelque chose sur cette étiquette par programmation dans d'autres méthodes? Les IBActions peuvent toujours être appelés sans que l'IBOutlet ne soit connecté, donc assurez-vous que l'étiquette est définitivement connectée comme l'IBOutlet –

+0

oh. Eh bien, il est branché en IB –

2

Vous ne devriez pas avoir init votre étiquette si elle est dans la plume. Si vous l'êtes, vous avez créé l'étiquette deux fois. Alors, qui sait à qui vous envoyez des messages. Dès que vous avez initialisé l'étiquette, vous avez divulgué le premier. L'étiquette que vous avez à l'écran n'est donc PAS celle que vous manipulez dans le code.

Essayez plutôt de placer votre code dans viewDidLoad. Il devrait être initialisé d'ici là.

Si cela ne fonctionne pas, essayez simplement viewDidAppear: simplement pour essayer de déboguer ceci.

+0

Cela n'a pas fonctionné:/ –

0

Qu'attendez-vous? Est-ce que l'étiquette indique quand votre code est commenté? Comment percentCorrect est-il défini dans la plume?

Avez-vous essayé:

- (void)awakeFromNib { 
    percentCorrect.adjustsFontSizeToFitWidth = YES; 
    percentCorrect.numberOfLines = 3; 
    percentCorrect.minimumFontSize = 100; 
    percentcorrent.text = @"What is the text in percentCorrect?"; 
} 
+0

Nope. Je ne travaille toujours pas:/ J'ai ajouté mon code à la question, alors peut-être y a-t-il un problème. –

0

J'ai eu le même problème. Semble que setText ne force pas automatiquement un redessin lorsque le changement se produit sur un thread non principal. Les mises à jour de l'interface utilisateur doivent toujours être effectuées sur le thread principal pour garantir la réactivité. Il y a une autre façon de le forcer, à l'aide d'un sélecteur:

label = [[UILabel alloc] init]; //assumes label is a data member of some class 
... 
(some later method where you want to update the label) 
... 
[label performSelectorOnMainThread:@selector(setText) withObject:@"New label value" waitUntilDone:false]; 

Vous pouvez également obtenir des résultats de simplement dire:

[label setNeedsDisplay]; 

qui forcera la mise à jour en interne, mais à la discrétion du SDK. J'ai trouvé que cela ne fonctionnait pas pour moi, donc pourquoi je recommande le sélecteur sur le fil principal.

+0

Les messages destinés aux classes UIKit et aux instances de ceux-ci, ainsi que les appels aux fonctions UIKit, doivent toujours être effectués sur le thread principal ** period **. Voir les documents récemment mis à jour: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/AddingBehaviorCocoa.html#//apple_ref/doc/uid/TP40002974-CH5-SW40 –

20
  1. Pour le réglage adjustsFontSizeToFitWidth entrer en vigueur, la propriété numberOfLines doit être réglé sur 1. Il ne fonctionnera pas si elle est! = 1.

  2. sont-awakeFromNib, viewDidLoad, viewWillAppear être appelé du tout?

  3. La propriété minimumFontSize ne fait rien si le texte correspond aux limites actuelles avec la police actuelle. Avez-vous défini la propriété de police pour l'étiquette?

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. Enfin, n'est pas un minimumFontSize = 100 un peu trop grand pour une taille de police min?

+3

est la bonne réponse La référence de classe UILabel pour la propriété ajustsFontSizeToFitWidth indique "Cette propriété est effective uniquement lorsque la propriété numberOfLines est définie sur 1." –

+0

@chrispix correct, cela a fonctionné pour moi. (J'utilise MonoTouch et cela fonctionne exactement de la même manière.) – tomfanning

+0

@ettore à propos de 'minimumFontSize = 100' étant trop grand pour une taille de police min: Imaginez un scénario dans lequel vous voulez créer un champ de texte qui s'aligne avec un image qui se trouve au-dessus du champ. Dans ce cas, il est logique de définir «minimumFontSize» assez grand: 'ajustsFontSizeToFitWidth' réduit UNIQUEMENT le fontSize, il n'alourdira pas un fontSize. – Webdevotion

0

Ce que je trouve parfois, ne comptez pas trop sur IB, il suffit d'ajouter une ligne pour définir le cadre:

labelx.frame=CGRectMake(labelx.frame.origin.x,labelx.frame.origin.y, 300, labelx.frame.size.height); 

Ensuite, les travaux de AutoResize!

Questions connexes