Как получить прикосновения, когда для родительского представления для userInteractionEnabled установлено значение NO в iOS - PullRequest
41 голосов
/ 11 января 2011

Когда родительское представление имеет userInteractionEnabled = NO, его подпредставления не будут принимать сенсорные события, даже если их свойство userInteractionEnabled установлено в YES.

Есть ли еще способ получить сенсорные события в подпредставлениях?

Ответы [ 4 ]

74 голосов
/ 12 ноября 2011

Чтобы получить представление, позволяющее касаниям проходить сквозь него, но дать касаниям его подвидов, разрешите userInteractionEnabled в этом представлении значение YES и вместо этого используйте этот фрагмент:

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    id hitView = [super hitTest:point withEvent:event];
    if (hitView == self) return nil;
    else return hitView;
}

Источник: http://cocoaheads.tumblr.com/post/2130871776/ignore-touches-to-uiview-subclass-but-not-to-its

4 голосов
/ 07 марта 2011

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

1 голос
/ 14 августа 2018

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

Я надеюсь, что следующий код поможет вам.

class MyCustomParentView: UIView {    
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let hitView = super.hitTest(point, with: event)
        if hitView == self {
            return nil
        } else {
            return hitView
        }
    }
}
0 голосов
/ 28 февраля 2013

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

...