У меня проблема, когда у меня есть UIScrollView и заголовок (UIView) внутри моего основного представления, а мой заголовок находится над моим UIScrollView как таковым:
UIView.
|
|- UIScrollView.
|
|- Header. (UIView)
Я хочу, чтобы мой заголовок мог определять нажимает на него, но я также хочу, чтобы моя прокрутка могла прокручиваться, когда я перетаскиваю свой заголовок, что сейчас невозможно, потому что мой заголовок находится над ним и блокирует прокрутку.
Подводя итог, я хочу, чтобы мой заголовок обнаруживал касания, но прокручивал вперед до моего UIScrollView.
Чтобы решить эту проблему, я пробовал несколько вещей, и вот некоторые из них:
- Добавление UIPanGestureRecognizer в мой заголовок, чтобы он мог обнаруживать перетаскивание
- Добавление UITapGestureRecognizer в мой заголовок, чтобы он мог обнаруживать касание
- Настройка isUserInteractionEnabled = false при начале перетаскивания, поэтому жест может быть передан следующему UIResponder, которым в данном случае является мой UIScrollView
- Настройка isUserInteractionEnabled = true, когда мое перетаскивание имеет fi закончено, чтобы он снова мог обнаруживать касание
Это фрагмент кода:
override func viewLoad() {
myScreenEdgePanGestureRecognizer = UIPanGestureRecognizer(target: self, action:#selector(handlePan))
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action:#selector(handleTap(_:)))
headerView.addGestureRecognizer(myScreenEdgePanGestureRecognizer)
headerView.addGestureRecognizer(tapGestureRecognizer)
}
@objc func handlePan(_ sender: UITapGestureRecognizer){
print("dragging")
if headerView.isUserInteractionEnabled{
headerView.isUserInteractionEnabled = false
}
if sender.state == .began {
} else if sender.state == .ended {
headerView.isUserInteractionEnabled = true
}
}
@objc func handleTap(_ sender: UITapGestureRecognizer){
print("tapped")
}
На этом этапе я вижу, как перетаскивание и касание обнаруживаются нормально, но по какой-то причине isUserInteractionEnabled = false, похоже, не меняет поведение представления. Этот код действует так, как isUserInteractionEnabled всегда истинно независимо от того, что. touchesBegan, touchesMoved, touchesEnded методы, переопределяющие следующий
установка переменной для возврата ScrollView в качестве следующего UIResponder установка метода isExclusiveTouch в UIButton изменение isUserInteractionEnabled всеми возможными способами