2011-03-10 45 views
26

Tengo un IBAction conectado a un botón en mi Interface Builder.¿Cambiar el texto del botón de xcode?

¿Es posible cambiar el texto en el botón (en IB) desde mi código durante el tiempo de ejecución?

+0

¿Quiere decir 'IBAction', o quiere decir' IBOutlet'? Una salida es una conexión entre un objeto y una variable de instancia. –

Respuesta

69

Si usted tiene un botón que está conectado a una acción en su código, puede cambiar el título sin una variable de instancia.

Por ejemplo, si el botón se establece en esta acción:

-(IBAction)startSomething:(id)sender; 

Simplemente puede hacer esto en el método:

-(IBAction)startSomething:(id)sender { 
    [sender setTitle:@"Hello" forState:UIControlStateNormal]; 
} 

O si usted es querer cambiar el nombre de el botón, se puede crear un BOOL llamado "buttonToggled" (por ejemplo), y cambiar el nombre de esta manera:

-(IBAction)toggleButton:(id)sender { 
    if (!buttonToggled) { 
     [sender setTitle:@"Something" forState:UIControlStateNormal]; 
     buttonToggled = YES; 
    } 
    else { 
     [sender setTitle:@"Different" forState:UIControlStateNormal]; 
     buttonToggled = NO; 
    } 
} 
+1

¿Por qué querrías crear una variable adicional para hacer un seguimiento del estado del botón en lugar de solo consultar el texto del botón? Si insiste en usar un valor por separado para determinar el texto del botón, le recomendaría usar la propiedad 'tag' para el botón en lugar de un valor booleano por separado. – FreeAsInBeer

5

Sí. Hay un método en UIButton -setTitle:forState: que usa.

17
UIButton *myButton; 

[myButton setTitle:@"My Title" forState:UIControlStateNormal]; 
[myButton setTitle:@"My Selected Title" forState:UIControlStateSelected]; 
4
[myButton setTitle:@"Play" forState:UIControlStateNormal]; 
3

myapp.h

{ 
UIButton *myButton; 
} 
@property (nonatomic,retain)IBoutlet UIButton *myButton; 

myapp.m

@synthesize myButton; 

-(IBACtion)buttonTitle{ 
[myButton setTitle:@"Play" forState:UIControlStateNormal]; 
} 
2

Otra forma de cambiar entre:

- (IBAction)signOnClick:(id)sender 
{ 
    if ([_signOnButton.titleLabel.text isEqualToString:@"Sign off"]) 
    { 
     [sender setTitle:@"Sign on" forState:UIControlStateNormal]; 
    } 
    else 
    { 
     [sender setTitle:@"Sign off" forState:UIControlStateNormal]; 
    } 
} 
1

No hay necesidad de añadir si {} else {} flujo de control. Inicializar el texto de los botones para los diferentes estados en la vista o ViewController constructor:

[btnCheckButton setTitle:@"Normal" forState:UIControlStateNormal]; 
[btnCheckButton setTitle:@"Selected" forState:UIControlStateSelected];

luego cambiar el estado del botón al Seleccionado:

[btnCheckButton setSelected:YES];

luego cambiar el estado del botón en Normal:

[btnCheckButton setSelected:NO];
Cuestiones relacionadas