Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : hittest, responder, chain, touch, routing

Как работает Responder Chain и метод hitTest?

Этот вопрос проверяет понимание механизма маршрутизации событий касания и взаимодействия между вью в иерархии.

Короткий ответ

Когда пользователь касается экрана, UIKit вызывает у корневой UIWindow метод hitTest(_:with:), который рекурсивно спускается по сабвью, вызывая для каждой point(inside:with:). Первый вью, где точка находится внутри, возвращается как целевая, и далее событие проходит по цепочке Responder Chain: от вью к её контроллеру, затем к суперреспондам (nextResponder), пока не будет обработано.

Длинный ответ

Метод hitTest(_:with:):

  • Вызывается на вью, чтобы найти потомка, в котором произошло касание.

  • Проводит проверки: isUserInteractionEnabled, alpha > 0.01, isHidden == false.

  • Если точка внутри (point(inside:with:)), рекурсивно проверяет сабвью в обратном порядке z-оси.

Цепочка ответчиков (Responder Chain):

  • Цепочка состоит из объектов, реализующих UIResponder (вью, контроллеры, окно, приложение).

  • После hitTest и первичного назначения, событие передаётся вызывающему touchesBegan(_:with:) у найденной вью.

  • Если вью его не обрабатывает, вызывает nextResponder, и так далее, пока не достигнет UIApplication.

Пример проверки:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    	let view = super.hitTest(point, with: event)
    	print("Touched view:", view)
    	return view
}

Когда использовать:

  • Для кастомных контейнеров или изменения зоны кликабельности.

  • Чтобы расширить область нажатия, переопределяют point(inside:with:).

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Swift

    Swift

Ключевые слова

#hittest

#responder

#chain

#touch

#routing

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.