0

Я написал довольно длинный метод действий, связанный с несколькими UIButton s, и теперь я понял, что хотел бы иметь что-то другое, если я дважды нажму одну из кнопок , Таким образом, я устанавливаю два жеста распознавателей:Получение UIButton, который был двойным нажатием из метода действия UIGestureRecognizer

UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnce:)]; 
UITapGestureRecognizer *tapTwice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTwice:)]; 


tapOnce.numberOfTapsRequired = 1; 
tapTwice.numberOfTapsRequired = 2; 

[tapOnce requireGestureRecognizerToFail:tapTwice]; 

[self.mybutton addGestureRecognizer:tapOnce]; 
[self.mybutton addGestureRecognizer:tapTwice]; 

тогда я реализую методы:

- (void)tapOnce:(UIGestureRecognizer *)gesture{ 
    //Do what you were already doing 
} 


- (void)tapTwice:(UIGestureRecognizer *)gesture{ 
    // Some new functionality 
} 

сейчас, у меня нет проблемы с новой функциональностью. Где я застрял, я пытаюсь получить метод tapOnce:, чтобы сделать то, что моя кнопка уже делала. Мне нужно знать, какая кнопка была прослушиваются, поэтому я не могу использовать это:

[myButton sendActionsForControlEvents: UIControlEventTouchUpInside]; 

Я также попробовал старое:

for (button in myArrayOfButtons){ 
    [button sendActionsForControlEvents: UIControlEventTouchUpInside]; 
} 

не повезло либо.

Тогда я пошел по пути на самом деле создает отдельный метод для осуществления моей кнопки, так что было:

- (IBAction)buttonPressed:(id)sender { 

    //my functionality... 
} 

стали:

- (IBAction)buttonPressed:(id)sender { 

    [self myMethodwithSender:sender]; 
} 

-(void)myMethodwithSender: (id)sender{ 

    // my functionality 
} 

Так что работал сам по себе, но когда Я пытаюсь вставить кран один раз и дважды в игру, я застрял. Я попытался положить мой новый метод в методе для отвода раз:

- (void)tapOnce:(UIGestureRecognizer *)gesture{ 

     [self myMethodwithSender:sender]; 
} 

но, конечно, нет отправителя в этом методе, так что не работает

Затем я попытался изменить это (верно?):

UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnce:)]; 

к этому:

UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myMethodwithSender:)]; 

Что не работает. Поэтому я не знаю, как это сделать. Любые предложения приветствуются.

+0

Что значит «это на самом деле множество кнопок», и что означает «Не повезло», ? Что происходит? –

+0

В моем проекте много кнопок, и все они подключены к этому методу. Затем, в зависимости от того, на который вы нажимаете (отсюда важность «отправителя») появляется другое изображение и т. Д. ... когда я пытаюсь: кнопка UIButton *; for (кнопка в self.allTheButtons) {[self myMethodwithSender: отправитель];} в методе tapOnce. Я получаю сообщение об ошибке «использование необъявленного идентификатора отправителя». – Paul

+0

В этом случае ответ Лу Франко - это именно то, что вам нужно. –

ответ

1

С:

- (void)tapOnce:(UIGestureRecognizer *)gesture{ 
    [self myMethodwithSender:sender]; 
} 

Если myMethodWithSender не использует отправителя, вы можете отправить ноль. Если ему нужна кнопка, gesture.view должна быть этой кнопкой (если вы прикрепляете распознаватель к кнопке)

+0

Я просто попробовал gesture.view, и оно работает, но приложение заметно замедлится (изображение появляется при нажатии кнопок и он появляется с задержкой?) – Paul

+1

Вы можете только знать, что второй кран не подходит, если вы немного подождете его. Один кран не может срабатывать до тех пор, пока этот таймаут не будет достигнут. –

+0

Я вижу. Благодарю. Поскольку мы находимся в этом, любая идея, почему кнопка UIButton *; для (кнопка в self.allTheButtons) { [кнопка addGestureRecognizer: tapOnce]; [кнопка addGestureRecognizer: tapTwice];} не будет работать? – Paul