2009-10-07 8 views
0

Comment créer une action similaire à UIButton ou à d'autres contrôleurs d'interface utilisateur?Événement + gestionnaire

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside]; 
[view addSubview:button]; 

... 

- (void)buttonClicked 
{ 
// Handler 
} 

Je voudrais avoir une classe qui peut appeler un gestionnaire personnalisé. Comment puis-je créer cette classe et comment puis-je ajouter un gestionnaire personnalisé? (Je voudrais même idée avec ButtonClicked.)


Chuck, qui est exactement ce que j'ai demandé! Je vous remercie! Une dernière chose, comment puis-je envoyer un argument à mon action. Je voudrais avoir un paramètre NSString dans mon gestionnaire

Je voudrais quelque chose comme ça (mais ça fonctionne pas):

@interface Example : NSObject { 
    id target; 
    SEL action; 
} 

- (id)initWithTarget:(id)targetObject action:(SEL)runAction; 
- (void)activate; 
@end 

@implementation Example 
- (id)initWithTarget:(id)targetObject action:(SEL)runAction { 
    if (self = [super init]) { 
     target = targetObject; 
     action = runAction; 
    } 
    return self; 
} 

- (void)activate { 
    [target performSelector:action withObject:self withObject: @"My Message"]; 
} 
@end 

@interface ExampleHandler : NSObject { 

} 

-(void):init; 
-(void)myHandler:(NSString *)str; 

@end 

@implementation ExampleHandler 

-(void)init { 
    [super init]; 
    Example *ex = [[Example alloc] initWithTarget: self action: @selector(myHandler) ]; 

} 

-(void)myHandler:(NSString *)str { 
    NSLog(str); 
} 

@end 

Répondre

1

Ce serait la même chose que votre gestionnaire actuel.

@interface SomeOtherHandler : NSObject 
{ 
} 

-(void)onButtonClick:(id)sender; 

@end 

// when creating your button 
[button addTarget:someOtherHandler action:@selector(onButtonClick:) forControlEvents:UIControlEventTouchUpInside]; 
1

Je pense que vous demandez comment implémenter le mécanisme de rappel target-action. Si oui, c'est vraiment simple:

@interface Example : NSObject { 
    id target; 
    SEL action; 
} 

- (id)initWithTarget:(id)targetObject action:(SEL)runAction; 
- (void)activate; 
@end 

@implementation Example 
- (id)initWithTarget:(id)targetObject action:(SEL)runAction { 
    if (self = [super init]) { 
     target = targetObject; 
     action = runAction; 
    } 
    return self; 
} 

- (void)activate { 
    [target performSelector:action withObject:self]; 
} 
@end 
Questions connexes