Как добавить распознаватели жестов к нескольким кнопкам?

#iphone #objective-c #xcode #cocoa-touch #uitouch

#iPhone #objective-c #xcode #cocoa-touch #uitouch

Вопрос:

Привет, я пытаюсь добавить распознаватели жестов в ‘UIButton’. Когда я делаю это так:

 UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.LeftBottomSpaceBtn addGestureRecognizer:singleTap];
[singleTap requireGestureRecognizerToFail:doubleTap];
[singleTap release];
  

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

 UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.LeftBottomSpaceBtn addGestureRecognizer:singleTap];
[self.LeftUpSpaceBtn addGestureRecognizer:singleTap];
[self.RightBUpSpaceBtn addGestureRecognizer:singleTap];
[self.LeftReturnBtn addGestureRecognizer:singleTap];
[self.RightReturnBtn addGestureRecognizer:singleTap];
[self.DeleteBtn addGestureRecognizer:singleTap];
[self.CapsBtn addGestureRecognizer:singleTap];
[singleTap requireGestureRecognizerToFail:doubleTap];
[singleTap release];
  

Итак, как я могу добавить один и тот же жест к нескольким кнопкам так же, как я добавил «Длительное нажатие» и «Двойное нажатие»?

Комментарии:

1. UIButton имеет addTarget:(id)target action:(SEL)action forControlEvents метод. Поэтому, если вы хотите обработать только 1 касание для кнопки, используйте этот метод вместо распознавателей.

Ответ №1:

Я бы предложил следующее:

 NSMutableSet *buttons = [[NSMutableSet alloc] init];

[buttons addObject: self.LeftBottomSpaceBtn];
[buttons addObject: self.LeftUpSpaceBtn];
[buttons addObject: self.RightBUpSpaceBtn];
[buttons addObject: self.LeftReturnBtn];
[buttons addObject: self.RightReturnBtn];
[buttons addObject: self.DeleteBtn];
[buttons addObject: self.CapsBtn];

for(UIButton *button in buttons)
{
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    [button addGestureRecognizer:singleTap];
    [singleTap requireGestureRecognizerToFail:doubleTap];
    [singleTap release];
}
  

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

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

Ответ №2:

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

Создайте разные экземпляры распознавателей жестов и добавьте их в отдельные представления.

Комментарии:

1. да, я это знаю. Но если мне это нужно для кнопки с несколькими кнопками, то как я могу это выполнить.