2009-06-05 15 views
6

Dlaczego moja UILabel się nie zmienia? Używam następujący kod i nic się nie dzieje:Dlaczego moja UILabel się nie zmienia?

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

Oto mój kod 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 

Jakieś pomysły? Dziękujemy

+0

linia ta powinna być: [procentKoryguj adjustFontSizeToFitWidth]; –

+7

powinno być procentCorrect.adjustsFontSizeToFitWidth = TAK; –

Odpowiedz

0

Możliwe, że percentCorrect nie został jeszcze zainicjowany. Czy percentCorrect jest równe nil, gdy funkcja ta jest wywoływana przez przypadek? Jeśli tak, poczekaj, aż zostanie poprawnie zainicjowany, aby ustawić jego właściwości.

+0

Masz rację, zapomniałem zainicjować. Ale nadal nie będzie działać:/ –

2

Upewnij się, że wszystko jest poprawnie podłączone. Upewnij się, że IBOutlet dla UITextfield jest ustawiony i ustaw punkty przerwania w metodzie i zobacz, że kod jest dotykany. Jeśli tak, to jest możliwe, że percentCorrect nie został poprawnie podłączony.

+0

Wszystko jest obramowane, ponieważ etykieta odpowiada na moje IBActions –

+2

Czy można zmienić coś na tej etykiecie programowo w innych metodach? IBAutions można nadal wywoływać bez podłączania IBOutlet, więc upewnij się, że etykieta jest na pewno podłączona jako IBOutlet –

+0

oh. Cóż, jego podłączenie do IB –

2

Nie powinieneś/musiałaś/musiałaś/musiałaś/musiałaś/musiałaś/musiałaś/powinnaś mieć swojej etykiety, jeśli znajduje się ona w stalówce. Jeśli tak, to stworzyłeś etykietę dwa razy. Więc kto wie, do którego się przesyłasz. Natychmiast po zainicjowaniu etykiety wyciekłaś pierwszą. Tak więc etykieta na ekranie NIE jest tą, którą manipulujesz w kodzie.

Zamiast tego spróbuj wpisać kod w polu viewDidLoad. Do tego czasu powinna zostać zainicjowana.

Jeśli to nie działa, spróbuj viewDidAppear: po prostu spróbuj to debugować.

+0

To nie działało:/ –

0

Czego oczekujesz? Czy etykieta pokazuje, kiedy Twój kod został skomentowany? W jaki sposób procentCorrect jest zdefiniowany w stalówce?

Czy próbowałeś:

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

Nie. Nadal nie działa:/ Dodałem mój kod do pytania, więc być może jest tam problem. –

0

miałem ten sam problem. Wydaje się, że setText nie wymusza automatycznie odświeżania, gdy zmiana zachodzi w wątku innym niż główny. Aktualizacje interfejsu użytkownika należy zawsze wykonywać w głównym wątku, aby zapewnić szybkość reakcji. Jest jeszcze inny sposób, aby zmusić go, używając selektora:

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

Można również uzyskać wyniki od po prostu mówiąc:

[label setNeedsDisplay]; 

który wymusi aktualizację wewnętrznie, ale według uznania SDK. Stwierdziłem, że to nie działa dla mnie, dlatego polecam selektor w głównym wątku.

+0

Wiadomości do klas UIKit i ich wystąpień oraz wywołania funkcji UIKit powinny zawsze być wykonywane w wątku głównym ** **. Zobacz ostatnio zaktualizowane dokumenty: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/AddingBehaviorCocoa.html#//apple_ref/doc/uid/TP40002974-CH5-SW40 –

20
  1. Aby ustawienia adjustsFontSizeToFitWidth wejść w życie, właściwość numberOfLines musi być ustawiony na 1. To nie będzie działać, jeśli jest to! = 1.

  2. Czy awakeFromNib, viewDidLoad, viewWillAppear samopoczucie w ogóle dzwonił?

  3. Właściwość minimumFontSize nic nie zrobi, jeśli tekst pasuje do aktualnych granic z bieżącą czcionką. Czy ustawiłeś właściwość czcionki dla etykiety?

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. Wreszcie, nie jest minimumFontSize = 100 trochę zbyt duży dla minimum rozmiaru czcionki?

+3

To jest poprawną odpowiedzią. Referencja klasy UILabel dla właściwości adjustsFontSizeToFitWidth stwierdza: "Właściwość ta działa tylko wtedy, gdy właściwość numberOfLines jest ustawiona na 1." –

+0

@chrispix poprawne, to działało dla mnie. (Używam MonoTouch i działa dokładnie w ten sam sposób.) – tomfanning

+0

@ettore o wartości 'minimumFontSize = 100' jest duże w przypadku minimalnego rozmiaru czcionki: Wyobraź sobie scenariusz, w którym chcesz utworzyć pole tekstowe, które wyrównuje obraz, który znajduje się nad polem. W takim przypadku sensowne jest ustawienie 'minimalnaFontSize' całkiem duża:' adjustsFontSizeToFitWidth' TYLKO zmniejsza fontSize, nie skaluje fontu. – Webdevotion

0

Co znalazłem to czasami, nie polegaj zbytnio na IB, po prostu dodaj linię, aby ustawić ramkę:

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

Następnie prace AUTORESIZE!

Powiązane problemy