Ответ
Нет. Установка isUserInteractionEnabled = false для родительской UIView полностью отключает обработку всех событий касания (UITouch) для всей её иерархии subviews. Это свойство имеет каскадный эффект.
Пример, демонстрирующий проблему:
let containerView = UIView()
containerView.isUserInteractionEnabled = false // Отключает взаимодействие для всех subviews
let button = UIButton(type: .system)
button.setTitle("Tap Me", for: .normal)
button.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
containerView.addSubview(button)
// Касание по кнопке НИКОГДА не вызовет `handleTap`.
Обходные пути:
- Включить взаимодействие у родителя (
isUserInteractionEnabled = true). - Переопределить
hitTest(_:with:)у родительской вью, чтобы точечно передавать события определённым subviews. - Использовать
UIGestureRecognizerна subview (но он также не сработает, если родитель отключён).
Основное правило: если родитель не взаимодействует, то и его дети — тоже.