2012-06-06 7 views
6

Tengo una función (por ejemplo function1) donde tengo un botón y un objeto llamado auxiliarStruct, y tengo esa línea:cómo implementar la propiedad addTarget en un UIButton

[btn addTarget:self action:@selector(userSelected:) forControlEvents:UIControlEventTouchUpInside]; 

Pero en @selector (userSelected) Necesito pasar como parámetros un objeto necesario en esa función, pero no sé cómo implementarlo. he declarado que se opone aquí:

//UsersController.h 
#import <UIKit/UIKit.h> 

@interface UsersController : NSObject{ 
    NSInteger *prof_id; 
    NSString *createTime; 
    NSString *fullName; 
    NSString *thumb; 
} 

@property (nonatomic) NSInteger *prof_id; 
@property (nonatomic, retain) IBOutlet NSString *createTime; 
@property (nonatomic, retain) IBOutlet NSString *fullName; 
@property (nonatomic, retain) IBOutlet NSString *thumb; 

@end 

me han llamado la función declarada como esto:

-(void)userSelected:(id)sender{ 
    //CODE 
} 

Tengo un objeto de esta clase, llamada auxiliarStruct y esto es lo que necesito. Probé con

[btn addTarget:self action:@selector(**userSelected:auxiliarStruct**)forControlEvents:UIControlEventTouchUpInside]; 

pero no funciona Puede alguien ayudarme? Gracias.

ps: lo siento por mi Inglés, sé que es mala

+1

¿qué tipo de parámetro? ¿Puede dar un ejemplo? – Pfitz

+0

un objeto de una clase propia con 4 nsstrings dentro: UsersController: NSObject { NSInteger * prof_id; NSString * createTime; NSString * fullName; NSString * pulgar; } –

+0

Pfitz, edité la pregunta. Espero que lo entiendas ahora –

Respuesta

18

Sólo se puede pasar un objeto (UIButton*) como un parámetro con addTarget @selector método. Puede establecer la etiqueta UIButton y usarla en la función llamada. Es posible que desee averiguar cualquier alternativa para enviar valores de cadena.

Utilice el código de abajo para pasar una etiqueta con el botón:

 btn_.tag = 10; 
    [btn_ addTarget:self action:@selector(functionName:) forControlEvents:UIControlEventTouchUpInside]; 

La acción del botón debería tener este aspecto:

- (void) functionName:(UIButton *) sender { 

    NSLog(@"Tag : %d", sender.tag); 

} 
+0

que no funciona, conObject no es compatible con addTarget –

+0

@nanoDev Ok. Voy a comprobar – Vaquita

+0

Ok, gracias Neptuno –

1

El evento enviará el botón como parámetro, por lo que:

-(void)userSelected:(id)sender { 

      UIButton *button = sender; 
      ... 
    } 
3

No sé si puede agregar parámetros a la acción del botón, nunca me encontré con una metanfetamina sobredosis.

Lo más parecido que hicimos fue seleccionar diferentes etiquetas a los botones y diferenciar las acciones de acuerdo a las etiquetas.

De todos modos, esto no es exactamente una respuesta a su pregunta, pero yo sugeriría como una alternativa al uso de una propiedad de clase en lugar de enviar el parámetro. Por ejemplo:

  • Haz clic en el botón y deseas enviar el valor "test" a tu selector. En lugar de enviar "prueba", estableces esa propiedad de clase en "prueba" y en tu selector la lees desde allí. No sé si se ajusta a tus necesidades al 100%, pero considero que es una opción.

usted plantea una pregunta interesante sin embargo. Trataré de investigarlo en caso de que lo necesite también a veces y si encuentro algo, actualizaré mi respuesta

[edit] Aparentemente usted no es el único que hace esta pregunta: How can I pass a parameter to this function? En este caso tampoco había una solución estándar y se usó la etiqueta.

Cuestiones relacionadas