Функция UIButton с целью nil не вызывается? - PullRequest
1 голос
/ 15 мая 2011

Я сделал много своего собственного "CustomUIButton" в цикле for в моем viewcontroller. В этом классе «CustomUIButton» я реализовал UIGestureRecognizer следующим образом:

    (id)initWithFrame:(CGRect)frame 
    {
        self = [super initWithFrame:frame];
        if (self) {

    // custom things.

     UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
            longPress.minimumPressDuration = 1.0;
            [self addGestureRecognizer:longPress];
            [longPress release];
    }
}

    - (void) handleLongPress:(UILongPressGestureRecognizer*) recognizer{

        if (recognizer.state == UIGestureRecognizerStateEnded) {
            NSLog(@"Long press Ended");
        }
        else {

            NSLog(@"Long press detected.");
             // Do something
        }
    }

Если я инициирую цель с помощью "self", будет вызвана моя функция handleLongPress в этом классе. Это круто. Если я инициализирую цель с помощью «nil», она должна проверить родительский viewcontroller, верно?

Есть идеи, почему не будет вызвана дополнительная функция с тем же именем в моем viewcontroller? (Для этого теста я прокомментировал функцию «longpress» класса кнопок.)

1 Ответ

1 голос
/ 15 мая 2011

В документах для метода initWithTarget:action: UIGestureRecognizer для параметра target указано:

Объект, являющийся получателем сообщений действий, отправленных получателем.когда он распознает жест. nil не является допустимым значением.

Обратите внимание на последнее предложение.

Документы также говорят это, что должно объяснить, почему оно не работает:

Распознаватель жестов не участвует в цепочке респондентов представления.

Необходимо указать значение для target.

...