2012-05-14 5 views
5

Voglio passare un URL tramite l'azione del pulsante, perché ho 10 pulsanti che vengono creati attraverso il codice dinamicamente e al clic quindi c'è un url specifico per ogni pulsante corrispondente. Ecco il mio codicecome posso passare qualsiasi tipo di parametro nell'azione UiButton?

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

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

Ma qui vengo avvertimento come "linkUrl variabile inutilizzata".

Ho studiato diversi articoli ma qualcuno ha detto che non è possibile passare l'argomento linke. Qualcuno può dirmi che come posso passare url per ogni azione del pulsante e anche come recuperare quei valori. nella definizione clickMe.

Grazie in anticipo.

risposta

11

sottoclasse UIButton così:

MyButton.h

@interface MyButton : UIButton 
{ 
    NSString *_linkUrl; 
} 

@property (nonatomic, retain) NSString *linkUrl 

MyButton.m

@implementation MyButton 
@synthesize linkUrl = _linkUrl 

Passare il linkUrl:

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

Ora è possibile ottenere il linkUrl nella vostra azione del genere:

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

non possiamo passare argomento in modo dinamico attraverso selettore di azioni in base alle mie esigenze? Come NSString * linkUrl = [NSString stringWithFormat: @ "% @", [AllrecordG objectForKey: @ "ColorLink"]]; [leftLabelG addTarget: self action: @selector (clickMe: linkUrl :) forControlEvents: UIControlEventTouchUpInside]; – Banshi

+0

Sì, ho aggiornato la mia risposta – MathieuF

+0

In realtà la mia classe di pagina è già @interface homePage: UIViewController così come posso implementare il codice precedente – Banshi

2

mettere il vostro linkUrl in un NSArray;

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

quindi impostare un tag per il pulsante come l'indice nella matrice, quindi

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

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

uso una categoria

- (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]; 

}