
рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
рд▓рдХреНрд╖реНрдп рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ?
рдмрдЯрди рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдзрд┐ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЯреАрдПрд▓, рдбреЙ
рдЬрдм рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХреЛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, UIKit рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ViewController
)ред рдпрджрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, iOS рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рдЪреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, UIKit
рдирд┐рдХрдЯрддрдо UIResponder
-a рдХреА рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдпрд╣ рд╡рд┐рдзрд┐ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдорд┐рд▓реА рддреЛ рдХреЛрдИ рджреБрд░реНрдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
UIViewController, UIView, UIApplication
рдХреЛ UIResponder
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ UIResponder
ред
iOS рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рдЪреЗрди рдФрд░ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реИ
UIKit
iOS рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рдЪреЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ UIKit
рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ UIKit
, рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ UIResponder
рдХреА рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ UIKit
рд╕реВрдЪреА рдкрд╣рд▓реЗ рдЙрддреНрддрд░рджрд╛рддрд╛ (рдкрд╣рд▓реЗ UIResponder
рдХрд┐ рдШрдЯрдирд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреА рд╣реИ, рд╕реЗ рдмрдиреА рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ UIButton(UIView)
рдФрд░ рдЗрд╕рдХреЗ subviews
UIButton(UIView)

UIResponder
рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП canPerformAction
рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
open func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool
рдпрджрд┐ рдЪрдпрдирд┐рдд UIResponder
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ,
UIKit
рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд░реАрдХреЗ рд╕реЗ рдЕрдЧрд▓реЗ UIResponder
рдХреЛ target
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рднреЗрдЬрддрд╛ рд╣реИ рдЬреЛ рдЕрдЧрд▓рд╛ UIResponder
рджреЗрддрд╛ рд╣реИред
open func target(forAction action: Selector, withSender sender: Any?) -> Any?
рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ UIResponder
рдореЗрдВ рд╕реЗ UIResponder
рднреА рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╕реВрдЪреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдХреНрд▓рд┐рдХ рдХреЗ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕реЗ UIViewController
рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди UIKit
рдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ UIView
рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓рд╛ рдЙрддреНрддрд░рджрд╛рддрд╛ рдерд╛ред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП UIKit
рдиреЗ рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ UIResponder
рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдХрд┐ UIViewController
рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рдереАред
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, iOS Responder Chain
рдПрдХ рд╕рд░рд▓ subviews
рдХреА рдЧрдИ subviews
рд╕реВрдЪреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк UIResponder (becomeFirstResponder)
рдмрди рд╕рдХрддреЗ рд╣реИрдВ
рдкрд╣рд▓реЗ UIResponder
рдФрд░ рдЗрд╕реЗ resignFirstResponder
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд░рд╛рдиреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ resignFirstResponder
ред рдпрд╣ рдЕрдХреНрд╕рд░ рдХреАрдмреЛрд░реНрдб рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ UITextField
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рддрднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм UITextField
first responder
ред
iOS рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рдЪреЗрди рдФрд░ UIEvent
рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рдЪреЗрди рд╕реНрдХреНрд░реАрди, рдореВрд╡рдореЗрдВрдЯ, рдХреНрд▓рд┐рдХ рдХреЛ рдЫреВрдиреЗ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдХрд┐рд╕реА рдШрдЯрдирд╛ (рд╕реНрдкрд░реНрд╢, рдЧрддрд┐, рд░рд┐рдореЛрдЯ-рдХрдВрдЯреНрд░реЛрд▓, рдкреНрд░реЗрд╕) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ UIEvent
рдХреЛ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ UIWindow
рдХреЛ UIApplication.shared.sendEvent()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, UIWindow
UIResponder
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ hitTest:withEvent
рдЬрд┐рд╕ hitTest:withEvent
рд╕реЗ UIResponder
рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ first responder
рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд UIResponder
рдХреА рдПрдХ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╣реИред
рд╕рд┐рд╕реНрдЯрдо UIEvent
рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, UIResponder (UIViewController, UIView, UIApplication)
рдЙрдкрд╡рд░реНрдЧ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) open func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) open func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) open func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) open func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) open func pressesChanged(_ presses: Set<UIPress>, with event: UIPressesEvent?) open func pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?) open func pressesCancelled(_ presses: Set<UIPress>, with event: UIPressesEvent?) open func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) open func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) open func motionCancelled(_ motion: UIEvent.EventSubtype, with event: UIEvent?) open func remoteControlReceived(with event: UIEvent?)
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ sendEvent
рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП UIResponder
рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ first responeder
рдХрд╛рд░рдг first responeder
рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдИрд╡реЗрдВрдЯ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреА рд╣реИрдВред
рдпрд╣ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ iOS Responder Chain
UIKit
рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ / рд╕рдВрдЪрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред UIResponder
рдХреНрд░рд┐рдпрд╛рдПрдБ рдПрдХ рдмрд╛рд░ NotificationCenter.default.post
рд╕рдорд╛рди рд╣реЛрддреА рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ UIViewController
, рдЬреЛ UINavigationController рд╕реНрдЯреИрдХ рдореЗрдВ рдЧрд╣рд░рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдмрдЯрди рдХреЛ рджреВрд╕рд░реА рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддреЛ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛ред рдЖрдк delagate рдкреИрдЯрд░реНрди рдпрд╛ NotificationCenter.default.post
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди iOS Responder Chain
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИред
button.addTarget(nil, action: #selector(RootVC.doSomething), for: .touchUpInside)
рдЬрдм рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ UIViewController
рдХреА UIViewController
рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред # рдЪрдпрдирдХрд░реНрддрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ:
@objc func doSomething() @objc func doSomething(sender: Any?) @objc func doSomething(sender: Any?, event: UIEvent?)
рдкреНрд░реЗрд╖рдХ рд╡рд╣ рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдиреЗ рдШрдЯрдирд╛ рдХреЛ рднреЗрдЬрд╛ рд╣реИ - рдпреВрдмреНрдпреВрдЯреНрдЯрди, рдпреВрдЖрдИрдЯреИрдХреНрд╕рдлрд╝рд┐рд▓реНрдб, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди [рд╕рдВрд▓рдЧреНрди]:
UIEvent, UIResponder рдФрд░ рдЙрдиреНрдирдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг (рдкреЗрдЯрд░ рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯрд░)
рдЖрдИрдУрдПрд╕ рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрддреНрддрд░рджрд╛рддрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЙрджрд╛рд╣рд░рдг
IOS рд░рд┐рд╕реНрдкреЙрдиреНрдбрд░ рдЪреЗрди рдкрд░ рдСрдл рдбреЙрдХ
UIResponder рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдбреЙрдХ