Как добавить распознаватели жестов на несколько кнопок? - PullRequest
5 голосов
/ 13 октября 2011

Привет, я пытаюсь добавить распознаватели жестов в '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];

Так как я могу добавитьодним и тем же жестом для нескольких кнопок таким же образом я добавил 'longPress' и 'doubleTap'?

Ответы [ 2 ]

8 голосов
/ 13 октября 2011

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

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];
}

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

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

5 голосов
/ 13 октября 2011

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

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

...