titlelabel color buttons iphone

iphone - color - cómo pasar una variable a una acción UIButton



menu ios (8)

Cámbielo para leer:

[downbutton addTarget:self action:@selector(action1:) forControlEvents:UIControlEventTouchUpInside];

No sé sobre el SDK de Iphone, pero el objetivo de una acción de botón probablemente reciba una identificación (normalmente el remitente designado).

- (void) buttonPress:(id)sender;

Dentro de la llamada al método, el remitente debe ser el botón en su caso, lo que le permite leer propiedades como su nombre, etiqueta, etc.

Quiero pasar una variable a una acción UIButton, por ejemplo

NSString *string=@"one"; [downbutton addTarget:self action:@selector(action1:string) forControlEvents:UIControlEventTouchUpInside];

y mi función de acción es como

-(void) action1:(NSString *)string{ }

Sin embargo, devuelve un error de sintaxis. ¿Puede alguien mostrarme cómo pasar una variable a una acción UIButton?


La única forma que he encontrado para hacer esto es establecer una variable de instancia antes de llamar a la acción


Si necesita distinguir entre varios botones, puede marcar sus botones con etiquetas como esta:

[downbutton addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]; downButton.tag = 15;

En su método delegado de acción, puede manejar cada botón de acuerdo con su etiqueta establecida previamente:

(void) buttonPress:(id)sender { NSInteger tid = ((UIControl *) sender).tag; if (tid == 15) { // deal with downButton event here .. } //... }

ACTUALIZACIÓN: sender.tag debe ser un NSInteger lugar de un NSInteger *


Puede usar referencias asociativas para agregar datos arbitrarios a su UIButton:

static char myDataKey; ... UIButton *myButton = ... NSString *myData = @"This could be any object type"; objc_setAssociatedObject (myButton, &myDataKey, myData, OBJC_ASSOCIATION_RETAIN);

Para el campo de política (OBJC_ASSOCIATION_RETAIN), especifique la política adecuada para su caso. En el método delegado de acción:

(void) buttonPress:(id)sender { NSString *myData = (NSString *)objc_getAssociatedObject(sender, &myDataKey); ... }


Otra opción para pasar variables, que me parece que es más directo que la etiqueta de la respuesta de Leviatan, es pasar una cadena en accessibilityHint. Por ejemplo:

button.accessibilityHint = [user objectId];

Luego, en el método de acción del botón:

-(void) someAction:(id) sender { UIButton *temp = (UIButton*) sender; NSString *variable = temp.accessibilityHint; // anything you want to do with this variable }


Puede establecer la etiqueta del botón y acceder desde el remitente en acción

[btnHome addTarget:self action:@selector(btnMenuClicked:) forControlEvents:UIControlEventTouchUpInside]; btnHome.userInteractionEnabled = YES; btnHome.tag = 123;

En la función llamada

-(void)btnMenuClicked:(id)sender { [sender tag]; if ([sender tag] == 123) { // Do Anything } }


Puede extender UIButton y agregar una propiedad personalizada

//UIButtonDictionary.h #import <UIKit/UIKit.h> @interface UIButtonDictionary : UIButton @property(nonatomic, strong) NSMutableDictionary* attributes; @end //UIButtonDictionary.m #import "UIButtonDictionary.h" @implementation UIButtonDictionary @synthesize attributes; @end


Puede usar las cadenas de los UIControlStates que no utiliza:

NSString *string=@"one"; [downbutton setTitle:string forState:UIControlStateApplication]; [downbutton addTarget:self action:@selector(action1:) forControlEvents:UIControlEventTouchUpInside];

y la función de acción:

-(void)action1:(UIButton*)sender{ NSLog(@"My string: %@",[sender titleForState:UIControlStateApplication]); }