2009-08-04 19 views
5

Soy un desarrollador de iPhone para principiantes. Mi código es el siguiente:Cambie el texto de un UILabel (UIBarButtonItem) en una barra de herramientas programáticamente

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UILabel *lblTotCaratteri = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 25, 15)]; 
lblTotCaratteri.textAlignment = UITextAlignmentCenter; 
lblTotCaratteri.font = [UIFont italicSystemFontOfSize:13.0]; 
lblTotCaratteri.textColor = [UIColor greenColor]; 
lblTotCaratteri.backgroundColor = [UIColor clearColor]; 
lblTotCaratteri.adjustsFontSizeToFitWidth = YES; 
lblTotCaratteri.text = @"0"; 

UIBarButtonItem *lblCaratteri = [[UIBarButtonItem alloc] initWithCustomView: lblTotCaratteri]; 

inserimentoToolbar.items = [NSArray arrayWithObjects:fixedSpace, lblCaratteri, fixedSpace, nil]; 

Así que en mi opinión que tienen una UITextView y esta barra de herramientas creada mediante programación. Quiero cambiar el texto de la etiqueta cada vez que agrego un caracter al UITextView. Cada vez que cambia el texto de UITextView, puedo mostrar una alerta presionada cada tecla. No puedo encontrar la manera de cambiar el texto de la etiqueta. Espero haber explicado mi situación. Lo siento por mi inglés. Saludos, Luca.

+2

¿Tiene una referencia a lblTotCaratteri? Si no, declare en su @interface. Si es así, no redeclare con UILabel * (en la línea 2 arriba). Luego puede llamar a lblTotCaratteri.text = @ "newtexthere". – mjhoy

+0

¡Funcionó! Lo agregué a la interfaz y, por supuesto, no redeclare. ¿Cómo puedo marcar su comentario como la respuesta? ¡Gracias de nuevo! – crash

+0

Noté que su variable se llama fixedSpace, pero su valor es en realidad FlexibleSpace. ¿Eso es una mala pasada? – mk12

Respuesta

6

Una forma sería, suponiendo inserimentoToolbar se declara en su interfaz:

[(UILabel *)[[toolbar.items objectAtIndex:1] view] setText:@"sometext"]; 

Esto realmente sólo funciona asumiendo su barra de herramientas no cambia (en términos de objetos).

O

La solución más ideal sería poner lblTotCaratteri en su interfaz (en el archivo de cabecera). Al igual que:

@interface UntitledViewController : UIViewController { 
    UILabel *lblTotCaratteri; 
} 

A continuación, el código incluido sería igual

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
lblTotCaratteri = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 25, 15)]; 
lblTotCaratteri.textAlignment = UITextAlignmentCenter; 
// etc etc etc 

A continuación, en cualquier momento, sólo tiene que utilizar

lblTotCaratteri.text = @"sometext"; 
+0

Lo siento mjhoy que, básicamente, reformulé tu respuesta en la segunda parte. No lo vi antes. – Neil

+0

Como comenté antes, funcionó agregar la etiqueta a la interfaz y llamarla donde sea que la necesite. Gracias por su respuesta también. – crash

5

Yo, Esto funcionó para mí, puedo cambiar el título UIBarButtonItem cuando Hago clic en el mismo UIBarButtonItem. Me refiero a que mi necesidad era como un cambio de tema. Si hace clic por primera vez dice "MyText1" y luego vuelve a hacer clic, el título cambia a "MyText2". El texto se alterna cuando el usuario hace clic en el botón.

-(IBAction)myBarButtonItem:(id)item{ 

if(flag){ 
    flag=FALSE; 
    [(UIBarButtonItem *)item setTitle:@"MyText1"]; 
} 
else{ 
    flag=TRUE; 
    [(UIBarButtonItem *)item setTitle:@"MyText2"]; 
} 

NOTA: No he creado UIBarButtonItem programmatically. Creé en Interface Builder y establecí la referencia del método "myBarButtonItem" en este botón. Entonces, cuando se pulsa UIBarButtonItem o se presiona este tipo de botón, se llama al método "myBarButtonItem" y se envía la referencia del botón como parámetro que además se escribe cast (UIBarButtonItem *) y se usa la propiedad setTitle para cambiar su texto o decir el título.

*** No declare la firma del método, es decir, En el archivo de encabezado: - (IBAction) myBarButtonItem: (id) elemento;

+0

'.text' no parece existir (¿más?), pero '.title' sí. – Roger

+0

No funcionó para mí programáticamente. –

Cuestiones relacionadas