Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Механизм обработки нажатий в iOS основан на цепочке респондеров (Responder Chain).
Этапы:
UIKit
или SwiftUI
).UIView
под точкой нажатия. Для этого используется метод hitTest(_:with:)
в порядке, обратном иерархии представлений (сначала дочерние, затем родительские).hitTest(_:with:)
возвращает самое глубокое подпредставление, которое может обработать событие (т.е. isUserInteractionEnabled
равно true и точка находится внутри фрейма). Если такого представления нет, возвращается nil
.hitTest(_:with:)
вернул представление (называемое "первый респондер"), система отправляет ему событие касания через метод touchesBegan(_:with:)
.super
), событие передается следующему респондеру в цепочке:
UIView
, следующий респондер — это его суперпредставление
(superview
).UIViewController.view
), следующий респондер — это его viewController
.UIViewController
), следующий респондер — это его представление модала
(presenter
) или splitViewController
, navigationController
, tabBarController
(в зависимости от контекста).UIWindow
, следующий респондер — это объект UIApplication
.UIApplication
, следующий респондер — это аппликационный делегат
(AppDelegate
).super
) или не достигнет конца цепочки (обычно AppDelegate
).Ключевые методы:
hitTest(_:with:)
: Метод UIView
для определения представления, находящегося под точкой каМеханизм обработки нажатий в iOS основан на цепочке респондеров (Responder Chain).
Этапы:
UIKit
или SwiftUI
).UIView
под точкой нажатия. Для этого используется метод hitTest(_:with:)
в порядке, обратном иерархии представлений (сначала дочерние, затем родительские).hitTest(_:with:)
возвращает самое глубокое подпредставление, которое может обработать событие (т.е. isUserInteractionEnabled
равно true и точка находится внутри фрейма). Если такого представления нет, возвращается nil
.hitTest(_:with:)
вернул представление (называемое "первый респондер"), система отправляет ему событие касания через метод touchesBegan(_:with:)
.super
), событие передается следующему респондеру в цепочке:
UIView
, следующий респондер — это его суперпредставление
(superview
).UIViewController.view
), следующий респондер — это его viewController
.UIViewController
), следующий респондер — это его представление модала
(presenter
) или splitViewController
, navigationController
, tabBarController
(в зависимости от контекста).UIWindow
, следующий респондер — это объект UIApplication
.UIApplication
, следующий респондер — это аппликационный делегат
(AppDelegate
).super
) или не достигнет конца цепочки (обычно AppDelegate
).Ключевые методы:
hitTest(_:with:)
: Метод UIView
для определения представления, находящегося под точкой каЗарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.