Проблема с UITapGestureRecognizer - PullRequest
7 голосов
/ 10 мая 2011

У меня есть основной viewController, он называется WelcomeViewController.У меня есть подкласс UIView, и в нем есть некоторые связанные с видом вещи.Я хочу добавить UITapGestureRecognizer к этому подклассу.Я только хочу, чтобы распознаватель жестов распознавал касания внутри этого подпредставления.Как я это сделал.Должен ли я поместить UITapGestureRecognizer в подкласс или я должен добавить его в Welcome vc.Заранее спасибо.

Кроме того, я много играл с этим и, похоже, не могу понять.

Ответы [ 5 ]

18 голосов
/ 10 мая 2011

Это зависит от того, хотите ли вы обрабатывать нажатие в вашем пользовательском объекте просмотра или в контроллере представления.

Если в представлении добавить это к init или другому подходящему месту:

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self addGestureRecognizer:tapRecognizer];
[tapRecognizer release];

Если в контроллере вида добавить это в viewDidLoad (или в другом правильном месте):

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[yourCustomView addGestureRecognizer:tapRecognizer];
[tapRecognizer release];

обработчик тот же:

- (void)handleTap:(UITapGestureRecognizer*)recognizer
{
    // Do Your thing. 
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
    }
}

Посмотрите на пример SimpleGestureRecognizer , и вы должны получить довольно хорошую идею.

---- Обновлено 01.10.2012 ----

Для тех, кто любит использовать раскадровку / перо, это очень просто!

  1. Откройте раскадровку / перо.

  2. Перетащите нужный тип распознавателя из библиотеки объектов на требуемый элемент пользовательского интерфейса.

  3. Щелкните правой кнопкой мыши по объекту распознавателя, затем подключите его selector к IBAction в владельце файла (обычно это UIViewController.) Если вам нужно, также подключите делегат.

  4. Готово! enter image description here

2 голосов
/ 10 мая 2011

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

gestureRecognizer.delegate = self;

, например.Затем примите протокол UIGestureRecognizerDelegate в своем заголовке.

1 голос
/ 11 июня 2013

Пожалуйста, проверьте view.userInteractionEnabled=true;

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

Я думаю, у вас может быть та же проблема, с которой я столкнулся.Когда вы вызываете [yourCustomView addGestureRecognizer: tapRecognizer];вам нужно ссылаться через UIView *, поэтому в вашем примере попробуйте:

UIView *mySubView = yourCustomView; 
[mySubView addGestureRecognizer:tapRecognizer];

надеюсь, это поможет.

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

Вы можете выбрать получателя UITapGestureRecognizer, это не обязательно должен быть тот же класс, который создал экземпляр распознавателя (то есть self).Если вы создадите его в своем WelcomeViewConroller, вы можете выбрать любое подпредставление для получения событий:

[tapRecognizer addTarget:aSubview action:@selector(myMethod:)];
...