- ๊ณต์๋ฌธ์-UIViewController
- ๊ณต์๋ฌธ์-UIResponder
- iOS์ Responder์ Responder Chain ์ดํดํ๊ธฐ
UICollectionViewController, UITableViewController ๋ฑ ๋ชจ๋ ViewController์ ์์ํด๋์ค๋ UIViewController
์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ UIViewController
์ ํต์ฌ์ ์ธ ์์ ํด๋์ค๋ UIResponder
์
๋๋ค.
์ดํ ์ง์ญ
@MainActor class UIViewController : UIResponder
UIViewController ํด๋์ค๋ ๋ชจ๋ view controller๋ค์ ๊ณตํต์ ์ผ๋ก ๋ถ๋ฐฐ๋๋ ํ์๋ฅผ ์ ์ํฉ๋๋ค.
UIViewController
ํด๋์ค๋ ์๋์ ํ์๋ค์ ๋ํ ์ฃผ์ ์ฑ
์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- view ๋ด๋ถ ๋ด์ฉ๋ค์ updateํ๋ค. ๋ณดํต์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ๋ฐ๋ผ์ ๋ด์ฉ์ updateํ๋ค.
- view๋ฅผ ํตํด ์ฌ์ฉ์์์ ์ํธ์์ฉ์ ๋ํด ๋ฐ์ํ๋ค.
- interface ์ ๋ฐ์ ์ธ ๋ ์ด์์์ ๊ด๋ฆฌํ๊ณ view๋ฅผ ๋ฆฌ์ฌ์ด์งํ๋ค.
- ์ฑ ๋ด์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค(๋ค๋ฅธ view controller ๋ฑ)๊ณผ ์ํธ์์ฉ์ ํ๋ค.
view controller๋ ๋ทฐ๋ค๊ณผ ๋จ๋จํ ๋ฌถ์ฌ์์ด์ ๋ทฐ์ ๊ณ์ธต ๊ตฌ์กฐ ์์์ event์ ์ฒ๋ฆฌ๋ฅผ ์ฐธ์ฌํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ํนํ, view controller๋ UIResponder ๊ฐ์ฒด
๋ก์ view controller์ root view์ ํด๋น ๋ทฐ์ super view(์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ view controller์ ์ํ๋) ์ฌ์ด์ Responder Chain
์ ์ฝ์
๋ฉ๋๋ค. ๋ง์ฝ view controller์ ๋ทฐ๋ค ์ค ๊ทธ ๋๊ตฌ๋ event๋ฅผ ์ฒ๋ฆฌํ์ง ์๋๋ค๋ฉด, view controller๋ ์ด๋ฒคํธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๊ฑฐ๋ super view์ ์ ๋ฌํ ์ ์์ต๋๋ค.
@available(iOS 2.0, *)
open class UIResponder : NSObject, UIResponderStandardEditActions {
open var next: UIResponder? { get }
open var canBecomeFirstResponder: Bool { get } // default is NO
open func becomeFirstResponder() -> Bool
open var canResignFirstResponder: Bool { get } // default is YES
open func resignFirstResponder() -> Bool
open var isFirstResponder: Bool { get }
// ...
}
Responder ๊ฐ์ฒด
๋ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ๊ณ ์ด๋ฒคํธ์ ๋ฐ์ํ ์ ์๋ UIReponder์ ์ธ์คํด์ค
์
๋๋ค. UIApplication
, UIViewController ๊ฐ์ฒด๋ค
, ๋ชจ๋ UIView ๊ฐ์ฒด๋ค(UIWindow ๊ฐ์ฒด ํฌํจ)
์ ํฌํจํ ๋ง์ ์ฃผ์ ๊ฐ์ฒด๋ค ๋ํ reponder์
๋๋ค. ์ด๋ฒคํธ๊ฐ ์ผ์ด๋๋ฉด, UIKit์ ์ด๋ฒคํธ ํธ๋ค๋ง์ ์ํด ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฑ์ reponder ๊ฐ์ฒด๋ค์๊ฒ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
์ด๋ฒคํธ์ ์ข ๋ฅ์ touch events, motion events, remote-control(์๊ฒฉ์กฐ์ข ) events, ๊ทธ๋ฆฌ๊ณ press events ๋ฑ์ด ์์ต๋๋ค. ์ด๋ฌํ ํน์ ์ด๋ฒคํธ๋ค์ ํธ๋ค๋งํ๊ธฐ ์ํด์๋ responder๊ฐ ํด๋น ์ด๋ฒคํธ์ ๋์๋๋ ๋ฉ์๋๋ค์ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๊ตฌํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํฐ์น ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ๊ธฐ ์ํด์๋ responder๊ฐ touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), touchesCancelled(_:with:) ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
ํฐ์น์ ๊ฒฝ์ฐ์, responder๋ ํฐ์น์ ๋ณํ๋ฅผ ํธ๋ํนํ๊ณ ์ฑ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ ํ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด์ UIKit์์ ์ ๊ณตํ๋ ์ด๋ฒคํธ ์ ๋ณด๋ฅผ ์ด์ฉํฉ๋๋ค.
Responder
๋ค์ UIEvent๋ฅผ ์ฒ๋ฆฌํ ์๋ ์์ง๋ง input view๋ฅผ ํตํด ์ปค์คํ
๋ input์ ๋ฐ์๋ค์ผ ์๋ ์์ต๋๋ค. system keyboard๊ฐ ํ์์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ฅ ์ ๋ํ๋ด๋ ์์์
๋๋ค. ๋ง์ฝ ์ ์ ๊ฐ UITextField๋ UITextView๋ฅผ ํญํ๋ฉด view๋ first responder๊ฐ ๋๊ณ input view๋ฅผ ๋์ฐ๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ input view๋ system keyboard์ด์ฃ .
์ด์ ๋น์ทํ๊ฒ ์ฐ๋ฆฌ๋ ์ปค์คํ
input view๋ฅผ ๋ง๋ค๊ณ ๋ค๋ฅธ responder๊ฐ ํ์ฑํ ๋ ๋ ์ปค์คํ
๋ input view๋ฅผ ๋์ธ ์ ์์ต๋๋ค. ์ปค์คํ
input view๋ฅผ responder์ ์ฐ๊ฒฐํ๋ ค๋ฉด, ํด๋น ๋ทฐ๋ฅผ responder์ inputView ํ๋กํผํฐ์ ํ ๋นํ์ธ์.
Responder Chain ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํ๊ณ , First Responder ์ญํ ์ ๋ํด ์ค๋ช ํ์์ค.