UITapGestureRecognizer не распознается, поскольку представление вложено в несколько представлений - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть пользовательское представление, которое я представляю, нажав на кнопку на контроллере представления или нажав на кнопку в ячейке табличного представления (представление таблицы является дочерним элементом контроллера представления)

Чтобы закрытьПользовательский вид Я хочу, чтобы пользователь мог нажать в любом месте экрана, чтобы закрыть его.Однако из-за множества иерархий представления в контроллерах представления.Простой UITapGuestureRecognizer не работает.Есть ли обходной путь для такого случая?

1 Ответ

0 голосов
/ 06 декабря 2018

Создайте подкласс UIView, назовите его MyTapView.Присвойте этому классу родительское представление, которое содержит все ваши подпредставления.Переопределите в своем классе следующее, чтобы перехватить любые прикосновения, сделанные к вашему экземпляру * 1003. *

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
        for (UIView *subview in self.subviews.reverseObjectEnumerator) {
            CGPoint subPoint = [subview convertPoint:point fromView:self];
            UIView *result = [subview hitTest:subPoint withEvent:event];
            if (result != nil) {
                return result;
            }
        }
    }
    // use this to pass the 'touch' onward in case no subviews trigger the touch
    return [super hitTest:point withEvent:event];
}

Этот метод игнорирует скрытые объекты просмотра, которые отключили взаимодействие с пользователем или имеют уровень альфа менее 0,01,Этот метод не учитывает содержимое представления при определении попадания (не стесняйтесь изменять это).Таким образом, представление все еще может быть возвращено, даже если указанная точка находится в прозрачной части содержимого этого представления и теперь, после ее переопределения, получает прикосновения за пределами границ.

...