Выбор ответа Senior UIKit обновлено

Почему кнопка не получает нажатия

Вопрос

Кнопка видна на экране, но не реагирует на касания. Какая причина подходит?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Кнопка выходит за границы супервью, и касание попадает вне его bounds. Hit-testing начинается с окна и спускается по иерархии: view проверяет point(inside:with:) по своим bounds и только тогда опрашивает детей.

Варианты ответа

  1. У кнопки alpha = 0.5, а полупрозрачные view не получают касания
  2. Кнопка добавлена в иерархию через addSubview ещё в viewDidLoad
  3. Кнопка находится внутри UIStackView, который перехватывает касания
  4. Кнопка выходит за границы супервью, и касание попадает вне его boundsправильный ответ

Разбор

Hit-testing начинается с окна и спускается по иерархии: view проверяет point(inside:with:) по своим bounds и только тогда опрашивает детей. Если кнопка торчит за пределы родителя (видно при clipsToBounds = false), касание вне родителя до неё не дойдёт. Ещё причины: isUserInteractionEnabled = false у предка, скрытие, alpha меньше 0.01, перекрытие другой view. Альфа 0.5 касания не блокирует, а stack view и viewDidLoad тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.