2012-06-06 8 views
6

Ho una funzione (ad esempio function1) dove ho un pulsante e un oggetto chiamato auxiliarStruct, e ho quella linea:come implementare struttura addTarget in UIButton

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

Ma @selector (userSelected) Ho bisogno di passare come parametri un oggetto necessario in quella funzione, ma non so come implementarlo. Ho dichiarato che l'oggetto qui:

//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 

ho la funzione chiamata dichiarata in questo modo:

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

Ho un oggetto di questa classe, chiamato auxiliarStruct e questo è che ho bisogno. Ho provato con

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

ma non funziona Qualcuno mi può aiutare? Grazie.

ps: mi dispiace per il mio inglese, lo so che è cattivo

+1

che tipo di parametro? Puoi fare un esempio? – Pfitz

+0

un oggetto di una propria classe con 4 nsstrings all'interno: UsersController: NSObject { NSInteger * prof_id; NSString * createTime; NSString * fullName; NSString * thumb; } –

+0

Pfitz, ho modificato la domanda. Spero che tu lo capisca ora –

risposta

18

È possibile passare solo un oggetto (UIButton*) come parametro con addTarget @selector metodo. È possibile impostare il tag UIButton e usarlo sulla funzione chiamata. Si consiglia di scoprire eventuali alternative per l'invio di valori stringa.

Utilizzare il codice seguente per il passaggio di un tag con il tasto:

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

L'azione pulsante dovrebbe apparire così:

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

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

} 
+0

non funziona, withObject non è supportato in addTarget –

+0

@nanoDev Ok. Controllerò – Vaquita

+0

Ok, grazie Neptune –

1

L'evento invierà il tasto come parametro, quindi:

-(void)userSelected:(id)sender { 

      UIButton *button = sender; 
      ... 
    } 
3

Non so se è possibile aggiungere parametri all'azione del pulsante, non ho mai incontrato una tale metanfetamina od.

La cosa più simile è stata selezionare tag diversi per i pulsanti e differenziare le azioni in base ai tag.

In ogni caso, questa non è esattamente una risposta alla tua domanda, ma ti suggerirei come alternativa all'uso di una proprietà di classe invece di inviare il parametro. Ad esempio:

  • si fa clic sul pulsante e si desidera inviare il valore "test" al proprio selettore. Invece di inviare "test", imposta la proprietà della classe su "test" e nel selettore la leggi da lì. Non so se soddisfa le tue esigenze al 100%, ma ritengo che sia un'opzione.

Si pone una domanda interessante però. Cercherò di esaminarlo nel caso in cui ne avrò bisogno anche a volte e se troverò qualcosa aggiornerò la mia risposta

[modifica] A quanto pare non sei l'unico a fare questa domanda: How can I pass a parameter to this function? In questo caso non c'era nemmeno una soluzione standard e il tag è stato utilizzato.

Problemi correlati