2009-06-05 22 views
6

¿Por qué no se cambia mi UILabel? Estoy utilizando el código siguiente y no pasa nada:¿Por qué no se cambia mi UILabel?

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

Aquí está mi código 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 

¿Alguna idea? Gracias

+0

esa línea debería ser: [percentCorrect adjustFontSizeToFitWidth]; –

+7

debe ser percentCorrect.adjustsFontSizeToFitWidth = YES; –

Respuesta

0

Es posible que percentCorrect aún no se haya inicializado. ¿Es percentCorrect igual a nil cuando se llama a esa función, por casualidad? Si es así, espere hasta que se haya inicializado correctamente para establecer sus propiedades.

+0

tienes razón, me olvidé de iniciar. Pero, todavía no funciona:/ –

2

Asegúrese de que todo esté conectado correctamente. Asegúrese de que IBOutlet para el UITextfield esté configurado y establezca puntos de interrupción dentro del método y verifique que se esté tocando el código. Si es así, es posible que percentCorrect no se haya conectado correctamente.

+0

Todo está activado, porque la etiqueta está respondiendo a mi IBActions –

+2

¿Se puede cambiar cualquier cosa en esa etiqueta mediante programación en otros métodos? Las IBActions aún se pueden llamar sin que IBOutlet esté conectado, así que asegúrese de que la etiqueta esté definitivamente conectada como IBOutlet –

+0

oh. Bueno, está conectado en IB –

2

No debe tener que init su etiqueta si está en la punta. Si es así, entonces creó la etiqueta dos veces. Entonces, quién sabe a cuál le estás enviando mensajes. Tan pronto como inicializó la etiqueta, filtró la primera. Entonces, la etiqueta que tiene en la pantalla NO es la que está manipulando en el código.

Intente colocar su código en viewDidLoad en su lugar. Debería ser inicializado para entonces.

Si eso no funciona, intente con viewDidAppear: simplemente para intentar depurar esto.

+0

Eso no funcionó:/ –

0

¿Qué esperas que pase? ¿La etiqueta se muestra cuando su código está comentado? ¿Cómo se define percentCorrect en el plumín?

has necesitado:

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

No. Todavía no funciona:/ Agregué mi código a la pregunta, por lo que tal vez haya un problema allí. –

0

que tenían el mismo problema. Parece que setText no fuerza automáticamente un redibujado cuando el cambio ocurre en un hilo no principal. Las actualizaciones de la interfaz de usuario siempre deben realizarse en el hilo principal para garantizar la capacidad de respuesta. Hay otra manera de forzar a que, mediante un selector:

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

Usted también puede obtener resultados de simplemente decir:

[label setNeedsDisplay]; 

lo que obligará a la actualización internamente, pero a discreción del SDK. Descubrí que no funcionaba para mí, por eso recomiendo el selector en el hilo principal.

+0

Los mensajes a las clases de UIKit y las instancias de los mismos, y las llamadas a las funciones de UIKit, siempre deben hacerse en el hilo ** período ** principal. Consulte los documentos recientemente actualizados: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/AddingBehaviorCocoa.html#//apple_ref/doc/uid/TP40002974-CH5-SW40 –

20
  1. Para que el ajuste de adjustsFontSizeToFitWidth para entrar en vigor, la propiedad numberOfLines se debe establecer en 1. No funcionará si es! = 1.

  2. son awakeFromNib, viewDidLoad, viewWillAppear bienestar llamado en absoluto?

  3. La propiedad minimumFontSize no hará nada si el texto se ajusta a los límites actuales con la fuente actual. ¿Estableciste la propiedad de fuente para la etiqueta?

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. Por último, no es un minimumFontSize = 100 un poco demasiado grande para un tamaño de fuente min?

+3

This es la respuesta correcta. La referencia de clase UILabel para la propiedad adjustustsFontSizeToFitWidth establece "Esta propiedad es efectiva solo cuando la propiedad numberOfLines está establecida en 1." –

+0

@chrispix correcto, esto funcionó para mí. (Estoy usando MonoTouch y funciona exactamente de la misma manera.) – tomfanning

+0

@ettore about 'minimumFontSize = 100' al más grande para un tamaño de fuente mínimo: Imagine un escenario en el que desea hacer un campo de texto que se alinee con un imagen que se encuentra sobre el campo. En ese caso, tiene sentido establecer 'minimumFontSize' bastante grande:' ajustaFontSizeToFitWidth' SÓLO reduce el tamaño de la fuente, no escalará un fontSize arriba. – Webdevotion

0

Lo que he encontrado es a veces, no confíe demasiado en IB, basta con añadir una línea para establecer el marco de:

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

Entonces, obras AUTORESIZE!

Cuestiones relacionadas