#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. да, я это знаю. Но если мне это нужно для кнопки с несколькими кнопками, то как я могу это выполнить.