2012-05-14 7 views
5

Quiero pasar una URL a través de la acción del botón, porque tengo 10 botones que se crean a través del código de forma dinámica y al hacer clic allí, se asigna una url específica para cada botón correspondiente. Aquí está mi código¿cómo puedo pasar cualquier tipo de parámetro en la acción UiButton?

NSString *linkUrl = [NSString stringWithFormat:@"%@",[AllrecordG objectForKey:@"Link"]]; 
[leftLabelG addTarget:self action:@selector(clickMe:linkUrl:) forControlEvents:UIControlEventTouchUpInside]; 

-(void)clickMe:(UIButton *)sender{ 
} 

Pero aquí consigo advertencia como "linkUrl variables sin usar".

He estudiado diferentes artículos, pero alguien dijo que no es posible pasar el argumento de eso. Cualquiera me puede decir que cómo puedo pasar la url para cada acción de botón y también cómo recuperar esos valores. en la definición de clickMe

Gracias de antemano.

Respuesta

11

Subclase UIButton así:

MyButton.h

@interface MyButton : UIButton 
{ 
    NSString *_linkUrl; 
} 

@property (nonatomic, retain) NSString *linkUrl 

MyButton.m

@implementation MyButton 
@synthesize linkUrl = _linkUrl 

Pase el linkUrl:

NSString *linkUrl = [NSString stringWithFormat:@"%@",[AllrecordG objectForKey:@"Link"]]; 
[leftLabelG addTarget:self action:@selector(clickMe:) forControlEvents:UIControlEventTouchUpInside]; 
[leftLabelG setLinkUrl:linkUrl]; 

Ahora usted puede conseguir la linkUrl en su acción como esa:

-(void)clickMe:(MyButton *)sender{ 
     NSString *url = sender.linkUrl; 
} 
+0

podemos dejar pasar el argumento de forma dinámica a través selector de acción según mi requisito? Como ese NSString * linkUrl = [NSString stringWithFormat: @ "% @", [AllrecordG objectForKey: @ "ColorLink"]]; [leftLabelG addTarget: acción propia: @selector (clickMe: linkUrl :) forControlEvents: UIControlEventTouchUpInside]; – Banshi

+0

Sí, he actualizado mi respuesta – MathieuF

+0

En realidad, mi clase de página ya es @interface homePage: UIViewController entonces, ¿cómo puedo implementar su código anterior – Banshi

2

poner su linkurl en un NSArray;

NSArray *linkUrls = [NSArray arratWithObjects:@"link",@"blah",@"blah"........,nil]; 

continuación, establezca una etiqueta a su botón como el índice de la matriz, a continuación,

leftLabelG.tag = 1; 
rightLabelG.tag = 2; 

-(void)clickMe:(UIButton *)sender{ 
     NSString *url = [linkUrls objectAtIndex:sender.tag]; 
} 
0

uso de una categoría

- (void)addTarget:(id)target action:(SEL)action withObject:(id)object forControlEvents:(UIControlEvents)controlEvents; 


-(void)addTarget:(id)target action:(SEL)action withObject:(id)object1 withObject:(id)object2 forControlEvents:(UIControlEvents)controlEvents { 
SEL action_ = [self generateAction:action withObject:object1 withObject:object2]; 
IMP impl = imp_implementationWithBlock(^(id self_) { 
    objc_msgSend(self_, action, self, [object1 copy], [object2 copy]); 
}); 
class_replaceMethod([target class], action_, impl, "[email protected]:@"); 

[self addTarget:target action:action_ forControlEvents:controlEvents]; 

}

Cuestiones relacionadas