почему мое действие не реагирует на селектор?

Я создал подкласс UILabel и добавил 2 свойства, которые выглядят следующим образом:

@property (nonatomic, assign) SEL action;
@property (nonatomic, assign) id target;

Затем я реализовал метод начала прикосновений UIView следующим образом:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    if ([target respondsToSelector:@selector(action)]) {
        [target performSelector:@selector(action) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
    }
}

внутри класса, содержащего подкласс UILabel, я устанавливаю цель и действие следующим образом:

    label.target = self;
    labek.action = @selector(myMethod);
    label.userInteractionEnabled = YES;

Класс, включающий метку, действительно имеет метод myMethod, поэтому он должен на него реагировать. Есть идеи, почему бы и нет?

Благодарность!


person Sean Danzeiser    schedule 06.09.2012    source источник


Ответы (3)


Вы устанавливаете свое действие следующим образом label.action = @selector(myMethod);, а затем используете действие и передаете его второму селектору [target respondsToSelector:@selector(action)]. Это не будет работать.

Вы хотите сделать это:

if ([target respondsToSelector:self.action]) {
    [target performSelector:self.action onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
}

По сути, оператор if не работает, потому что цель не отвечает на этот селектор. Поэтому его никогда не называют.

person James Paolantonio    schedule 06.09.2012

У вас есть ошибки в консоли отладки?

Как насчет

@selector(myMethod:) // with colon.

Селекторы в цели C

person coolnalu    schedule 06.09.2012

Убедитесь, что метка содержится в границах супервизора

person Andrea    schedule 06.09.2012