Событие + Обработчик - PullRequest
0 голосов
/ 08 октября 2009

Как я могу создать такое же действие, как у UIButton или других контроллеров UI?

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

...

- (void)buttonClicked
{
// Handler
}

Я хотел бы иметь класс, который может вызывать пользовательский обработчик. Как я могу создать этот класс и как я могу добавить собственный обработчик? (Мне бы хотелось, чтобы та же идея была с кнопкой Clicked.)


Чак, это именно то, что я спросил! Спасибо! Еще одна вещь, как я могу отправить один аргумент в мои действия. Я хотел бы иметь один параметр NSString в моем обработчике

Я бы хотел что-то вроде этого (но это не работает):

@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

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Я думаю, вы спрашиваете, как реализовать механизм обратного вызова целевого действия. Если это так, то это действительно просто:

@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
1 голос
/ 08 октября 2009

Это будет так же, как ваш текущий обработчик.

@interface SomeOtherHandler : NSObject
{
}

-(void)onButtonClick:(id)sender;

@end

// when creating your button
[button addTarget:someOtherHandler action:@selector(onButtonClick:) forControlEvents:UIControlEventTouchUpInside];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...